хранить SID в переменной - PullRequest
3 голосов
/ 08 июня 2010

Мне нужен способ сохранить SID текущего пользователя в переменной, я пробовал много вариантов:

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 

Никто не работает.

wmic path win32_useraccount where name='%UserName%' get sid должно возвращать 3 строки, а мне нужно, чтобы вторая хранилась в переменной.

Может кто-нибудь исправить мой скрипт?

Редактировать : Я использую файл .cmd.

Ответы [ 4 ]

4 голосов
/ 08 июня 2010

Это должно исправить:

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%

обратите внимание на "delims= " в цикле FOR.Он разделит входные данные в пробелах, которые содержатся в конце выходных данных вашего запроса WMI.

Условие if not "%%a"=="SID" будет истинным для второй итерации, а затем назначит переменную и выйдетцикл.

Надеюсь, что поможет.

2 голосов
/ 08 мая 2015

Я пишу этот код, и он хорошо работает для меня

for /F "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i
1 голос
/ 20 октября 2010

Другое решение может быть:

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
0 голосов
/ 18 января 2017

Еще один рабочий пример 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...