home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lsmt213c.zip / getgrps2.cmd < prev    next >
OS/2 REXX Batch file  |  2000-02-15  |  8KB  |  249 lines

  1. /*---------------------------------------------------------------------------*\
  2. |   GET all GROUPS & Members from a LAN Server 3.0 and higher                 |
  3. |   and dump it to an ASCII File                                              |
  4. |                                   (C) Alain Rykaert IBM Belgium SEP95-MAY96 |
  5. |                                                                 FEB2000     |
  6. \*---------------------------------------------------------------------------*/
  7.  
  8.     Parse Arg Option
  9.  
  10.     Call INIT                    /* Initialisation of DLL's and other stuff*/
  11.     Call CHKOPT                          /* Check Options & display Welcome*/
  12.     Call CHKPWS                               /* Check the PWS & Admin name*/
  13.     Call MAIN                                            /* do the main job*/
  14.     Call QUIT                                                       /* Quit*/
  15.  
  16.  MAIN:/* ------------------------------------------------------ MAIN: -------*/
  17.  
  18.     Call Time('R')
  19.    'if exist' OUTF 'del' OUTF
  20.     Call LineOut OUTF, '* Do not modify a user from the ADMINS, GUEST, SERVERS or USERS groups *'
  21.  
  22.     RC = NetEnumerate(70, 'GROUPS', '\\'SRVNAME)
  23.     if RC = 0
  24.      then Call RxStemSort 'GROUPS'
  25.      else do
  26.              Call LOGIT 'Get Groups', SRVNAME, RC
  27.              Return
  28.           end
  29.  
  30.     UL = 1                             /* Determine the Maximum USER length*/
  31.  /* RC = NetEnumerate(280, 'USERS', '\\'SRVNAME) */
  32.     RC = WfrxUserEnum('\\'SRVNAME,'USERS')
  33.     if RC = 0
  34.      then do i = 1 to USERS.0
  35.              if Length(USERS.i) > UL then UL = Length(USERS.i)
  36.           end
  37.      else do
  38.              Call LOGIT 'Get Users', SRVNAME, RC
  39.              Return
  40.           end
  41.  
  42.     HEADER = 'OPT;'Left('USERS',UL,' ',)';'
  43.     ALLGRP = ''
  44.     EMTGRP = ''
  45.  
  46.     HEADER = HEADER || ALLGRP
  47.     do i = 1 to GROUPS.0
  48.        CL = Length(GROUPS.i)
  49.        ALLGRP = ALLGRP || Left(GROUPS.i,CL,' ') || ';' /* All   Groups Line*/
  50.        EMTGRP = EMTGRP || Left(' ',CL,' ') || ';'      /* Empty Groups Line*/
  51.     end
  52.     HEADER = HEADER || ALLGRP
  53.     Call LineOut OUTF, HEADER
  54.  
  55.  /* RC = NetEnumerate(280, 'USERS', '\\'SRVNAME) */
  56.     RC = WfrxUserEnum('\\'SRVNAME,'USERS')
  57.     if RC = 0
  58.      then Call RxStemSort 'USERS'
  59.      else do
  60.               Call LOGIT 'Get Users', SRVNAME, RC
  61.               Return
  62.           end
  63.  
  64.     do i = 1 to USERS.0
  65.        if i // MAXLINES = 0
  66.         then Call LineOut OUTF, HEADER
  67.         else Nop
  68.  
  69.        if \MUTE
  70.         then do
  71.                 Call SysCurState OFF
  72.                 Call SysCurPos 20,0
  73.              end
  74.         else Nop
  75.        say '0909'x ESC'[K Total Users =' i'/'Users.0 USERS.i
  76.  
  77.        OUT = ''
  78.  
  79.        TMPGRP = EMTGRP
  80.        RC = NetGetInfo(330, 'MEMBER', '\\'SRVNAME, USERS.i)
  81.        if RC = 0
  82.         then do
  83.                 Call RxStemSort 'MEMBER'
  84.                 do j = 1 to MEMBER.0
  85.                    LEN = 1
  86.                    do k = 1 to GROUPS.0
  87.                       GRPLEN = Length(GROUPS.k)
  88.                       if MEMBER.j = GROUPS.k
  89.                         then TMPGRP = Overlay(Center('X',GRPLEN,' '),TMPGRP, LEN)
  90.                         else Nop
  91.                       LEN = LEN + GRPLEN + 1
  92.                    end
  93.                 end
  94.              end
  95.         else say 'RC :' RC
  96.        OUT = '   ;'Left(USERS.i,UL,' ')';'TMPGRP
  97.        Call LineOut OUTF, OUT
  98.     end
  99.  
  100.     if \MUTE then say '0909'x ' Total Time  =' Trunc(Time('E'),2)
  101.  
  102.     Call Stream OUTF, 'C', 'CLOSE'
  103.  
  104.     Call SysSetObjectData OUTF, 'ICONFILE='Directory()'\Groups2.Ico'
  105.  
  106.     Return
  107.  
  108.  CHKOPT:/* ---------------------------------------------------- CHKOPT: -----*/
  109.  
  110.     SRVNAME = '';
  111.     OUTF = 'GROUPS2.CSV';
  112.     LOGF = 'LSMT.LOG';
  113.     PIPE = '';
  114.     TRACE = 0;
  115.     MUTE = 0;
  116.  
  117.     OPTION = Translate(OPTION)
  118.     do while OPTION <> ''
  119.        Parse value OPTION with ARGUMENT ' ' OPTION
  120.        select
  121.         when Left(ARGUMENT,5) = '/SRV:'  then SRVNAME = Substr(ARGUMENT,6)
  122.         when Left(ARGUMENT,5) = '/OUT:'  then OUTF    = Substr(ARGUMENT,6)
  123.         when Left(ARGUMENT,5) = '/LOG:'  then LOGF    = Substr(ARGUMENT,6)
  124.         when Left(ARGUMENT,5) = '/PIP:'  then PIPE    = Substr(ARGUMENT,6)
  125.         when Left(ARGUMENT,2) = '/M'     then MUTE    = 1
  126.         when Left(ARGUMENT,2) = '/T'     then TRACE   = 1
  127.         otherwise Nop
  128.        end
  129.     end
  130.  
  131.     if SRVNAME = '' then signal GETHELP
  132.  
  133.     if \MUTE
  134.      then do
  135.              Topic1 = 'GETWELCOME'
  136.              Topic_String.Topic1.1 = SRVNAME
  137.              Topic_String.Topic1.2 = OUTF
  138.              Topic_String.Topic1.3 = LOGF
  139.              Topic_String.Topic1.4 = PIPE' '
  140.              Topic_List='WELCOMELOGO' Topic1 'GETGRPS2'
  141.              Call GETANS
  142.              Parse VALUE SysCurPos() With Old_R Old_C; 'Pause'
  143.              Call SysCurPos Old_R, Old_C; say ESC'[K'
  144.           end
  145.      else do
  146.              say 'ServerName =' SRVNAME
  147.              say 'OutputFile =' OUTF
  148.              say 'LogFile    =' LOGF
  149.           end
  150.     Return
  151.  
  152.  CHKPWS:/* ---------------------------------------------------- CHKPWS: -----*/
  153.  
  154.     RC = NetGetInfo(350, 'WKSTAINFO','')
  155.     if RC = 0
  156.      then do
  157.              ADMNAME = WKSTAINFO.UserName
  158.              PWSNAME = WKSTAINFO.ComputerName
  159.           end
  160.      else do
  161.             Call LOGIT 'Get PWS Info', ,RC
  162.             Call Quit
  163.           end
  164.     Return
  165.  
  166.  INIT:/* ------------------------------------------------------ INIT: -------*/
  167.  
  168.     Call RgUtil   '/m'                                    /* Rexx Utilities*/
  169.     Call RgUtils  '/m'                                    /* Rexx Utilities*/
  170.     Call RgNPipes '/m'                                       /* Named Pipes*/
  171.     Call RgLSRXUT '/m'                             /* Lan Server Rexx Utils*/
  172.  
  173.     Parse Upper Source . . P_NAME
  174.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  175.  
  176.    '@echo off'
  177.     ESC   = '1B'x
  178.     REDIR = '>NUL 2>NUL'
  179.     MAXLINES = 20              /* Number of Lines to separate with a header*/
  180.  
  181.     COLF  = 'GROUPS.INI'                         /* Column description file*/
  182.     Call CHKFILE COLF
  183.  
  184.     Resource_File = 'LSMT.RSC'
  185.     Call CHKFILE Resource_File
  186.  
  187.     Return
  188.  
  189.  GETANS:/* ---------------------------------------------------- GETANS: -----*/
  190.  
  191.     Vars_List =Ansi_Say(Resource_File Topic_List);
  192.     Parse VALUE SysCurPos() With Old_R Old_C;
  193.     Do While Vars_List <> '';
  194.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List;
  195.        Call SysCurPos Row, Column;
  196.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m';
  197.        End;
  198.     Call SysCurPos Old_R, Old_C;
  199.  
  200.     Return
  201.  
  202.  GETHELP:/* --------------------------------------------------- GETHELP: ----*/
  203.  
  204.     if \MUTE
  205.      then do
  206.              Topic1='GETHELP'
  207.              Topic_String.Topic1.1=PRGN;
  208.              Topic_List=Topic1;
  209.              Call GETANS
  210.           end
  211.      else say 'Incorrect options.'
  212.  
  213.     Call QUIT
  214.  
  215.     Return
  216.  
  217.  CHKFILE:/* --------------------------------------------------- CHKFILE: ----*/
  218.  
  219.     Parse Arg FILE
  220.     RC = Stream(FILE, 'C', 'QUERY EXIST')
  221.     if RC = ''
  222.      then do
  223.              say ' File' FILE 'not found.'
  224.              Call QUIT
  225.           end
  226.      else Nop
  227.     Call Stream FILE, 'C', 'CLOSE'
  228.  
  229.     Return
  230.  
  231.  LOGIT:/* ----------------------------------------------------- LOGIT: ------*/
  232.  
  233.     FUNC = ARG(1); INFO = ARG(2); RCOD = ARG(3)
  234.     RC = LLOGIT(LOGF, PIPE, ADMNAME, PRGN, FUNC, INFO, RCOD)
  235.  
  236.     Return
  237.  
  238.  QUIT:/* ------------------------------------------------------ QUIT: -------*/
  239.  
  240.     Call LineOut 'LSMT.END', PRGN, 1
  241.     Call Stream  'LSMT.END', 'C', 'CLOSE'
  242.     Call Stream   COLF,      'C', 'CLOSE'
  243.     Call Stream   LOGF,      'C', 'CLOSE'
  244.     Call Stream   OUTF1,     'C', 'CLOSE'
  245.     Call Stream   OUTF2,     'C', 'CLOSE'
  246.     Exit
  247.  
  248.  /*--------------------------------------------------------------------------*/
  249.