首页 > 解决方案 > 如何将 Windows 用户配置文件 SID 从注册表中提取到文本文件中?

问题描述

我有一个任务即将到来,我必须为所有计算机上的每个 Windows 配置文件手动输入HKEY_USER键值和字符串值。这可能需要一些时间。我倾向于将它们全部自动化,或者至少自动化一些流程。

我有添加密钥过程(来自列表sids.txt)工作:

@echo off
pushd %~dp0
for /f "usebackq tokens=*" %%A in ("SIDS.txt") do (
    REG ADD "%%A\create\key\here" /f
    REG ADD "%%A\create\key\here" /t REG_SZ /d "add string value here" /f
)
pause

为了进一步加快速度,我希望从这里获得一些帮助,从每个用户配置文件中获取 SID:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

对于列出的每个 SID,例如:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-2686047782-4092528985-2296408390-1413

在这些键中有一个 profile-image-path 值,其中包含 Windows 用户配置文件的名称。

我想要做的是将 Windows 配置文件名称和 sid 泵入格式如下的文本文件中,然后我可以相当快速地进行编辑,删除非 Windows 用户配置文件条目(如默认或系统帐户)并运行我上面针对列表的工作代码 - 编辑为只有一个 SIDS 列表,就像上面的工作代码一样。

S-1-5-21-2686047782-4092528985-2296408390-1413  mickey.mouse 
S-1-5-21-2686047782-4092528985-2296408390-1411  Donald.duck

标签: batch-filecmd

解决方案


最简单的方法是使用wmic useraccount查询来完成:

wmic useraccount get name,sid | findstr /vi "SID">somefile.txt
type somefile.txt

这将列出每个帐户并将输出重定向到一个名为的文件somefile.txt,它只会type向您显示文件的内容。

另一种方法是查看 userprofile 目录是否存在。这应该消除系统帐户。

@for /f "delims=" %i in ('wmic useraccount get name^,sid ^| findstr /vi "SID"') do @for /F %a in ("%i") do if exist "C:\users\%a" @echo(%i>>somefile.txt

推荐阅读