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

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

4 ответа

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

gwmi -ComputerName <computername> Win32_UserProfile

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

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

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

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

$env:USERPROFILE

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

Get-ChildItem Env:

Это более эффективно, если вы сделаете условие несоответствия частью запроса 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
Другие вопросы по тегам