Пакетное получение имени пользователя из Active Directory с использованием SID?

Следующий сценарий создает резервную копию данных профиля Windows каждого пользователя, если у каждого пользователя есть папка в месте резервного копирования:

@echo off

set Target=D:\backup

for /f "tokens=*" %%I in ('dir /a:d-h /b "%SystemDrive%\Users\*"') do if exist "%Target%\%%~nXI\" (

........

)

pause 
exit

Мне нужно изменить имя для входа одного пользователя. После изменения его в Active Directory папка профиля пользователя (C:\Users) сохраняет старое имя.

Насколько я понимаю: SID связан с учетной записью AD, и изменение имени пользователя и других свойств не влияет на профиль Windows пользователя.

Мне интересно, есть ли способ получить новое имя в пакетном режиме из его SID? Если да, то как?

Любая помощь поможет мне так много.


person A. Joson    schedule 13.02.2021    source источник
comment
Я не знаю, как это сделать в winbatch, но обычно делаю это в PowerShell. Будет ли решение PowerShell приемлемым?   -  person Jeff Zeitlin    schedule 13.02.2021
comment
Введите set и посмотрите на свои параметры, например, профиль пользователя.   -  person user14797724    schedule 14.02.2021
comment
Что-то вроде wmic useraccount where (sid='S-1-<RestOfTheSID>' and domain='%userdomain%') get name я думаю   -  person Theo    schedule 14.02.2021


Ответы (1)


Если вы хотите получить все имена пользователей, вы можете использовать % в качестве подстановочного знака.

Командная строка:

wmic useraccount get Name,SID

wmic useraccount where "sid like 'S-1-5-21%'" get name

И когда вы используете его с пакетным файлом, вы должны удвоить его с помощью %%, чтобы избежать его!

Пакетный файл

@echo off
wmic useraccount where "sid like 'S-1-5-21%%'" get name
pause

Вы можете попробовать этот пакетный файл, просто измените его на желаемый SID, если вы его знаете!

@echo off
Title Batch Getting user name from Active Directory using SID
Set "SID=S-1-5-21-1718693495-2001798431-3107361897-500"
Set "UserName="
for /f "skip=1 delims=" %%a in ('"wmic useraccount where sid="%%SID%%" get name"') do (
    for /f "delims=" %%b in ("%%a") do if not defined UserName set "UserName=%%~nb"
)
echo UserName = "%UserName%"
pause
person Hackoo    schedule 14.02.2021