使用WMIC查询SID并在批处理文件中设置为变量

时间:2014-10-21 20:57:14

标签: batch-file csv migration wmic sid

我正在编写从服务器2008到服务器2008 R2的用户迁移脚本。我已经编写了大部分脚本,但是我无法检索用户注册表导出的SID。到目前为止我有:

for /f "tokens=1" %%B IN (D:\users\$userprofile%\desktop\user.txt) do SET userx=%%B
echo %userx%
for /f "skip=2 tokens=2 delims=," %%A in  ('WMIC useraccount WHERE name='%userx%' get 
sid /format:csv') DO SET usersid=%%A
echo %usersid%

我目前正在测试这篇文章,因此user.txt只包含我的名字,但.txt稍后会填充要迁移的用户。目前代码返回

dgibbons - Invalid alias verb.

WMIC命令工作正常。搜索无效别名动词错误都指向name =之后的空格(如名称='%userx%')。删除变量(在for循环中保留WMIC cmd)并插入我的用户名仍会返回相同的错误。我也试过double,single和no quotes,每个都返回相同的错误。似乎问题是for循环在用户名之前创建了一个空格;无论如何,这是我对它的看法。任何人都知道如何使代码工作?

1 个答案:

答案 0 :(得分:0)

@echo off

for /f "skip=2 tokens=2 delims=," %%A in  ('"WMIC useraccount WHERE name='%username%' get sid /format:csv"') DO (
    SET usersid=%%A
)
echo %usersid%

问题出现在=符号中,这是一个标准分隔符,在这种情况下充当空间。根据我修复此问题最方便的方法是在单个引号中使用双引号。也可以使用^=进行转义,但代码有点难以理解。