【问题标题】:Batch Getting user name from Active Directory using SID?使用 SID 从 Active Directory 批量获取用户名?
【发布时间】:2021-02-13 17:35:53
【问题描述】:

只要每个用户在备份位置有一个文件夹,以下脚本就会备份每个用户的 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 中批量获取新名称?如果是,如何?

任何帮助都会对我有很大帮助。

【问题讨论】:

  • 我不知道有什么方法可以在 winbatch 中执行此操作,但我经常在 PowerShell 中执行此操作。 PowerShell 解决方案是否可以接受?
  • 输入 set 并查看您的选项,例如用户配置文件。
  • 我认为类似于wmic useraccount where (sid='S-1-<RestOfTheSID>' and domain='%userdomain%') get name

标签: for-loop batch-file active-directory wmic sid


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多