使用 WMIC 获取用户配置文件列表时出现问题
Issues when getting a list of user profiles using WMIC
我正在使用以下批处理命令来检索所有本地用户配置文件(也包括域用户):
for /f "delims=" %%I in ('dir /a:d-h /b "%SystemDrive%\Users\*" 2^>nul ^| %SystemRoot%\System32\findstr.exe /i /l /x /v /g:"%bin%\exclude_users.txt"') do (
问题在于此命令有其局限性:它不会真正检查相关用户是否确实拥有帐户。
用户 Compo 为我提供了一种使用 WMIC 检索配置文件名称的方法。
所以我最终编写了以下命令:
@For /F "tokens=* skip=1" %%I In ('%__AppDir__%wbem\WMIC.exe UserAccount Get Name ^|%__AppDir__%findstr.exe /i /l /x /v /g:"%bin%\exclude_users.txt"') do (
问题是:它忽略了我的排除文件(每行包含一个用户)并且最终生成了一个没有任何名称的配置文件。
知道如何解决这些问题吗?
@echo off
setlocal
set "bin=%~dp0"
for /f "tokens=* skip=1" %%I in ('
%__AppDir__%wbem\WMIC.exe UserAccount where Disabled^="FALSE" get Name ^|
%__AppDir__%WindowsPowerShell\v1.0\powershell -noprofile -command "$input.trim()" ^|
%__AppDir__%findstr.exe /i /l /x /v /g:"%bin%\exclude_users.txt"
') do echo "%%~I"
wmic
输出通过管道传输到 powershell
进行修剪,然后通过管道传输到 findstr
。
wmic
命令将使用 where
子句排除禁用的帐户。
根据需要更改 bin
的设置。
如果您想要一个仍然使用 WMIC 和您的排除列表的解决方案,那么应该按照您的要求执行以下操作。
@For /F Tokens^=4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount Where "LocalAccount='TRUE'" Assoc:List /ResultRole:Name 2^>NUL')Do @Echo %%G|%__AppDir__%findstr.exe /VXLIG:"%~dp0exclude_users.txt"
您也可以将其分成多行以便于阅读:
@For /F Tokens^=4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount^
Where "LocalAccount='TRUE'" Assoc:List /ResultRole:Name 2^>NUL'
)Do @Echo %%G|%__AppDir__%findstr.exe /VXLIG:"%~dp0exclude_users.txt"
我正在使用以下批处理命令来检索所有本地用户配置文件(也包括域用户):
for /f "delims=" %%I in ('dir /a:d-h /b "%SystemDrive%\Users\*" 2^>nul ^| %SystemRoot%\System32\findstr.exe /i /l /x /v /g:"%bin%\exclude_users.txt"') do (
问题在于此命令有其局限性:它不会真正检查相关用户是否确实拥有帐户。
用户 Compo 为我提供了一种使用 WMIC 检索配置文件名称的方法。
所以我最终编写了以下命令:
@For /F "tokens=* skip=1" %%I In ('%__AppDir__%wbem\WMIC.exe UserAccount Get Name ^|%__AppDir__%findstr.exe /i /l /x /v /g:"%bin%\exclude_users.txt"') do (
问题是:它忽略了我的排除文件(每行包含一个用户)并且最终生成了一个没有任何名称的配置文件。
知道如何解决这些问题吗?
@echo off
setlocal
set "bin=%~dp0"
for /f "tokens=* skip=1" %%I in ('
%__AppDir__%wbem\WMIC.exe UserAccount where Disabled^="FALSE" get Name ^|
%__AppDir__%WindowsPowerShell\v1.0\powershell -noprofile -command "$input.trim()" ^|
%__AppDir__%findstr.exe /i /l /x /v /g:"%bin%\exclude_users.txt"
') do echo "%%~I"
wmic
输出通过管道传输到 powershell
进行修剪,然后通过管道传输到 findstr
。
wmic
命令将使用 where
子句排除禁用的帐户。
根据需要更改 bin
的设置。
如果您想要一个仍然使用 WMIC 和您的排除列表的解决方案,那么应该按照您的要求执行以下操作。
@For /F Tokens^=4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount Where "LocalAccount='TRUE'" Assoc:List /ResultRole:Name 2^>NUL')Do @Echo %%G|%__AppDir__%findstr.exe /VXLIG:"%~dp0exclude_users.txt"
您也可以将其分成多行以便于阅读:
@For /F Tokens^=4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount^
Where "LocalAccount='TRUE'" Assoc:List /ResultRole:Name 2^>NUL'
)Do @Echo %%G|%__AppDir__%findstr.exe /VXLIG:"%~dp0exclude_users.txt"