Проблемы при получении списка профилей пользователей с помощью WMIC - PullRequest
2 голосов
/ 06 мая 2020

Я использовал следующую пакетную команду для получения всех профилей локальных пользователей (включая и пользователей домена):

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 предоставил мне методологию для получения имен профилей с использованием WMI C.

Итак, я написал следующую команду:

@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 (

Проблема в том, что он игнорирует мой файл исключения (который содержит по одному пользователю в строке) и заканчивается профилем без какого-либо имени.

Любая идея Как я могу решить эти проблемы?

Ответы [ 2 ]

1 голос
/ 06 мая 2020
@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 по мере необходимости.

0 голосов
/ 08 мая 2020

Если вам нужно решение, которое по-прежнему использует WMI C и ваш список исключений, то следующее должно соответствовать вашим требованиям.

@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"
...