Попытка определить, есть ли какие-либо пользовательские папки в сети, у которых нет связанной учетной записи пользователя. Все результаты возвращают «Пропавшие без вести», когда большинство должно вернуть «Найдено». Есть идеи?Powershell - Поиск и сравнение массивов с Quest CMDlets
$Dir = "\\ServerName\Share\"
$FolderList = Get-ChildItem($Dir) | where {$_.psIsContainer -eq $true}
$UserList = get-qaduser -sizelimit 0 | select LogonName
foreach ($Folder in $FolderList)
{
if ($UserList -contains $Folder.name)
{
"Found: " + $Folder.name
}
Else
{
"Missing: " + $Folder.name
}
}
Гений! Хотя я еще не совсем понял ваш код, он определенно работает! Спасибо вам обоим за ваш вклад. Извините, что я переполняю Stack noob и пока не могу вас проголосовать! – 2009-08-14 13:23:12
Essentialy $ users = @ {} создает хэш-таблицу (или словарь). Вторая строка заполняет этот словарь всеми именами входа пользователя и значением $ true. Затем в последней строке мы сканируем каждую папку и проверяем, находится ли это имя (не полный путь) в хеш-таблице. Если это не так, у вас есть потерянная папка. –
Это гораздо лучшее решение. Но ваш предыдущий код не работает, потому что $ UserList фактически содержит коллекцию PSObjects с свойством «LogonName». Поэтому ваш оператор «if» пытается сравнить коллекцию PSObject с String и, таким образом, не делает соответствия. В любой среде OO вы должны знать, какие типы объектов вы сравниваете. Вы можете исправить это, получив вместо этого только имена входа: $ UserList = get-qaduser -sizelimit 0 | for-each {$ _. LogonName} – JasonMArcher