2010-06-08 2 views
3

je besoin d'un moyen de stocker SID de l'utilisateur actuel dans une variable, j'ai essayé beaucoup de variantes de:magasin SID dans une variable

setlocal enableextensions 
for /f "tokens=*" %%a in ( 
'"wmic path win32_useraccount where name='%UserName%' get sid"' 
) do ( 
if not "%%a"=="" 
set myvar=%%a 
echo/%%myvar%%=%myvar% 
pause 
endlocal 

Aucun travaillent.

wmic path win32_useraccount where name='%UserName%' get sid devrait retourner 3 lignes, et j'ai besoin de la seconde stockée dans une variable.

Quelqu'un peut-il réparer mon script?

Modifier: J'utilise un fichier .cmd.

Répondre

4

Cela devrait corriger:

for /f "delims= " %%a in ('"wmic path win32_useraccount where name='%UserName%' get sid"') do (
    if not "%%a"=="SID" (   
     set myvar=%%a 
     goto :loop_end 
    ) 
) 

:loop_end 
echo %%myvar%%=%myvar% 

note la "delims= " dans la boucle. Il séparera l'entrée aux espaces, qui sont contenus à la fin de la sortie de votre requête WMI.

La condition if not "%%a"=="SID" sera vraie pour la deuxième itération, puis assignera la variable et sortira de la boucle.

Espérons que ça aide.

+0

homme merci, que dit il , désolé pour la réaction tardive, je devais faire Bussy autres choses – user361191

1

Une autre solution pourrait être:

FOR /F "tokens=1,2 delims==" %%s IN ('wmic path win32_useraccount where name^='%username%' get sid /value ^| find /i "SID"') DO SET SID=%%t 
1

je vous écris ce code et il fonctionne bien pour moi

for /F "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i 
+0

J'aime ça, mais ne le casserait pas si le nom d'utilisateur contient s un espace? – Jason

+0

A noter également, whoami traite beaucoup plus vite que wmic. – Jason

0

Un autre exemple de travail de WMIC

@ECHO OFF 
::SET Variables 
SET _USERSID=NoValue 
SET _User=QueryUserName 
::Run the WMIC Command 
@FOR /F "SKIP=1" %A IN ('"wmic useraccount where name='%_User%' get sid"') DO @FOR %B IN (%A) DO @SET _USERSID=%B 

::Now do something with the SID IF EXISTS 
:: Example below 
cls 
::Advise if the UserID was valid and echo out WMIC results 
@IF %_USERSID% == NoValue ECHO  USER ****%_User%**** NOT VALID 
@ECHO  WMIC Command %_USERSID% 

::Example of using the WMIC %_USERSID% variable for something 
@IF NOT %_USERSID% == NoValue REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%_USERSID%" /F 

::SET ECHO Command Prompt ON 
@ECHO ON