[wpkg-users] [OT] i hate script in cmd... ;(((

Marco Gaiarin gaio at sv.lnf.it
Tue Feb 14 22:52:08 CET 2012


I've wrote down a script/helper to add me in the task of adding some
domain group to some local group, wrapping around 'net localgroup'.
Script attached.

The script, on console, from SYSTEM user (the same that run wpkg) seems
to work well: check, add and remove membership correctly.

Used inside wpkg recipe (on action and check condition) behave
strangely.

Look at this. From wpkg log:

 2012-02-14 18:10:55, DEBUG   : Executing command: '"\\FILE\wpkg\tools\setlgrp.bat" check \"\\FILE\wpkg\packages\sudowin\sudoers-SANVITO.grp\" SANVITO'.
 2012-02-14 18:10:56, DEBUG   : Execute check for program '"\\FILE\wpkg\tools\setlgrp.bat" check \"\\FILE\wpkg\packages\sudowin\sudoers-SANVITO.grp\" SANVITO' returned '0'. Evaluating condition 'exitcodeequalto' revealed true when comparing to expected value of '0'.

from console:

 C:\WINDOWS\system32>"\\FILE\wpkg\tools\setlgrp.bat" check \"\\FILE\wpkg\packages\sudowin\sudoers-SANVITO.grp\" SANVITO
 C:\WINDOWS\system32>echo %ERRORLEVEL%
 1
 C:\WINDOWS\system32>

indeed the right answer is '1', because i've removed the membership
manually to test check condition.


Someone can help me?


PS: anothe little mystere came from " escaping... if i run:
	"\\FILE\wpkg\tools\setlgrp.bat" check "\\FILE\wpkg\packages\sudowin\sudoers-SANVITO.grp" SANVITO
 return strange errors, i have to escape the " ... boh...

-- 
dott. Marco Gaiarin				    GNUPG Key ID: 240A3D66
  Associazione ``La Nostra Famiglia''                http://www.sv.lnf.it/
  Polo FVG  -  Via della Bont�, 7 - 33078  -  San Vito al Tagliamento (PN)
  marco.gaiarin(at)sv.lnf.it	  tel +39-0434-842711  fax +39-0434-842797

		Dona il 5 PER MILLE a LA NOSTRA FAMIGLIA!
	   http://www.lanostrafamiglia.it/chi_siamo/5xmille.php
	(cf 00307430132, categoria ONLUS oppure RICERCA SANITARIA)

-- 
dott. Marco Gaiarin				    GNUPG Key ID: 240A3D66
  Associazione ``La Nostra Famiglia''                http://www.sv.lnf.it/
  Polo FVG  -  Via della Bontà, 7 - 33078  -  San Vito al Tagliamento (PN)
  marco.gaiarin(at)sv.lnf.it	  tel +39-0434-842711  fax +39-0434-842797

		Dona il 5 PER MILLE a LA NOSTRA FAMIGLIA!
	   http://www.lanostrafamiglia.it/chi_siamo/5xmille.php
	(cf 00307430132, categoria ONLUS oppure RICERCA SANITARIA)
-------------- next part --------------
@ECHO OFF
::
:: Script che si preoccupa di modificare le appartenenze ai gruppi locali,
:: usando 'net setlocalgroup'.
:: Riceve come input la modalità (check, add, delete), il nome del file
:: contenente le appartenenze (una per riga), nella forma:
::  <gruppo locale><puntoevirgola><gruppo o utente  di dominio>
:: e il nome del dominio.
::
:: CHANGELOG
:: (Wed Jan 25 18:22:04 CET 2012)
::  + prima versione

:: Un po' di verifiche...
::
if "%2" == "" (
	goto exit1
)
if not exist "%2" (
	goto exit1
)
if "%3" == "" (
	goto exit1
)

:: modo verifica
::
if "%1" == "check" (
	for /f "tokens=1,2 delims=;" %%a in (%2) do (
		rem echo net localgroup "%%a" pipe find /i "%3\%%b"
		net localgroup "%%a" | find /i "%3\%%b" >nul
		if ERRORLEVEL 2 goto exit1
		if ERRORLEVEL 1 (
			goto exit1
		)
	)
	goto exit0
)

:: modo add
::
if "%1" == "add" (
	for /f "tokens=1,2 delims=;" %%a in (%2) do (
		rem echo net localgroup "%%a" pipe find /i "%3\%%b"
		net localgroup "%%a" | find /i "%3\%%b" >nul
		if ERRORLEVEL 2 goto exit1
		if ERRORLEVEL 1 (
			net localgroup "%%a" "%3\%%b" /add >nul
			if ERRORLEVEL 1 (
				goto exit1
			)
		)
	)
	goto exit0
)

:: modo delete
:: Purtroppo il controllo su ERRORLEVEL funziona in modo ''maggiore
:: o uguale di'', e non si può usare %ERRORLEVEL% perchè una volta
:: istanziata fa casino. Si veda:
::	http://support.microsoft.com/kb/39585/it
::	http://blogs.msdn.com/b/oldnewthing/archive/2008/09/26/8965755.aspx
::
if "%1" == "delete" (
	for /f "tokens=1,2 delims=;" %%a in (%2) do (
		rem echo net localgroup "%%a" pipe find /i "%3\%%b"
		net localgroup "%%a" | find /i "%3\%%b" >nul
		if ERRORLEVEL 2 goto exit1
		if ERRORLEVEL 1 (
			echo. >nul
		) else (
			if ERRORLEVEL 0 (
				rem echo net localgroup "%%a" "%3\%%b" /delete
				net localgroup "%%a" "%3\%%b" /delete >nul
				if ERRORLEVEL 1 (
					goto exit1
				)
			)
		)
	)
	goto exit0
)

:: se il parametro è errato, lascio correre ed esco male
::

:: Molto semplicemente... esco male
::
:exit1
::echo falso
exit /b 1

:: Molto semplicemente... esco bene
::
:exit0
::echo vero
exit /b 0


More information about the wpkg-users mailing list