Можно ли с помощью 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