Назад | Перейти на главную страницу

Как использовать PowerShell для проверки расположения профилей пользователей на сервере?

Можно ли с помощью PowerShell и регулярных выражений найти все профили пользователей, которых нет на определенном сервере / папке? Если да, то как это сделать?

Для текущего пользователя:

$env:USERPROFILE

Чтобы получить список всех переменных среды, запустите:

Get-ChildItem Env:

В PowerShell используйте объект Win32_UserProfile WMI для удаленного поиска профилей:

gwmi -ComputerName <computername> Win32_UserProfile

Чтобы найти профили пользователей не на сервере (или в любом случае), вы можете сделать что-то вроде:

gwmi -ComputerName <computername> Win32_UserProfile | ? {"C:\Users\<username>" -contains $_.LocalPath}

Если путь существует, он даст результаты, если нет, то не будет. Вы можете делать что-то более интересное, но в основном это должно делать то, что вам нужно, без использования регулярных выражений.

Это более эффективно, если вы сделаете часть условия несоответствия в запросе LDAP
Пытаться:

$a = [adsisearcher]'(&(objectclass=user)(objectcategory=user)(!profilepath=\\\\servername\sharename*))'

Забавно, мне пришлось сделать это сегодня. Попробуйте этот скрипт, заменив servername, sharename, и c:\path\to\save.csv с соответствующими значениями. Я набрал это по памяти, поэтому не могу обещать никаких ошибок :(

$a = [adsisearcher]'(&(objectclass=user)(objectcategory=user)(profilepath=*))'
[void]$a.propertiestoload.add('name')
[void]$a.propertiestoload.add('profilepath')
$a.pagesize = 1000

$a.findall() | foreach-object {
    if($_.properties.profilepath[0] -notmatch '^\\\\servername\\sharename\\')
    {
        $op = '' | select name,profilepath
        $op.name = $_.properties.name[0]
        $op.profilepath = $_.properties.profilepath[0]
        $op
    }
} | export-csv -NoTypeInformation c:\path\to\save.csv