Как использовать 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