2

関連付けられたユーザーアカウントを持たないユーザーフォルダーがネットワーク上にあるかどうかを判断しようとしています。大多数が「Found」を返す必要がある場合、すべての結果は「Missing」を返します。何か案は?

$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
}
}
4

2 に答える 2

2

ハッシュテーブル (キーの非常に高速なルックアップを提供します) を使用する、少し異なるアプローチを試してみてはどうでしょうか。

$users = @{}
Get-QADUser -sizelimit 0 | Foreach {$users["$($_.LogonName)"] = $true}
$dir = "\\ServerName\Share\"
Get-ChildItem $dir | Where {$_.PSIsContainer -and !$users["$($_.Name)"]}

フォルダー名が LogonName と正確に一致しない場合は、EBGreen が指摘しているように、キー ($users["$($ .LogonName)"]) またはフォルダー名を使用してハッシュテーブルのインデックスを作成するときに、キーを調整する必要があります。 (!$users["$($ .Name)"])。

于 2009-08-14T02:29:34.160 に答える
1

-contains は、コレクション内のアイテムがテストしているものと同一である場合に一致するため、$Folder.Name が LogonName とまったく同じであることを確認してください。通常はそうではないでしょう。ほとんどの企業では、foo という名前のユーザーのフォルダー名は foo$ です。

于 2009-08-13T19:05:44.493 に答える