2

尝试确定网络上是否有任何用户文件夹没有关联的用户帐户。当大多数结果应该返回“找到”时,所有结果都返回“缺失”。有任何想法吗?

$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 回答