Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Powershell-使用Quest cmdlet搜索和比较阵列_Arrays_Search_Powershell_Compare_Quest - Fatal编程技术网

Arrays Powershell-使用Quest cmdlet搜索和比较阵列

Arrays Powershell-使用Quest cmdlet搜索和比较阵列,arrays,search,powershell,compare,quest,Arrays,Search,Powershell,Compare,Quest,正在尝试确定网络上是否有任何没有关联用户帐户的用户文件夹。所有结果返回“缺失”,而大多数结果应返回“发现”。有什么想法吗 $Dir = "\\ServerName\Share\" $FolderList = Get-ChildItem($Dir) | where {$_.psIsContainer -eq $true} $UserList = get-qaduser -sizelimit 0 | select LogonName foreach ($Folder in $FolderList)

正在尝试确定网络上是否有任何没有关联用户帐户的用户文件夹。所有结果返回“缺失”,而大多数结果应返回“发现”。有什么想法吗

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

-如果集合中的项与测试的项相同,则contains将匹配,因此请确保$Folder.Name与LogonName完全相同。通常不会。对于名为foo的用户,大多数公司的文件夹名称都是foo$

试试使用哈希表(提供异常快速的键查找)的稍微不同的方法如何:


如果文件夹名称与LogonName不完全匹配,那么正如EBGreen所指出的,当您使用键($users[“$($.LogonName)”)索引哈希表时,您需要调整键($users[“$($.LogonName)”])或文件夹名称(!$users[“$($.name)”)。

Genius!虽然我还没有完全理解你的代码,但它确实有效!感谢你们两位的投入。对不起,我是个不速之客,还不能给你投票!基本上,$users=@{}创建一个哈希表(或字典)。第二行用所有用户登录名和$true值填充该字典。然后在最后一行中,我们扫描每个文件夹并检查其名称(不是完整路径)是否在哈希表中。如果不是,那么你有一个孤立的文件夹。这是一个更好的解决方案。但是您以前的代码不起作用,因为$UserList实际上包含一个带有“LogonName”属性的PSObject集合。因此,您的“if”语句试图将PSObject集合与字符串进行比较,因此无法进行匹配。在任何OO环境中,都必须知道要比较的对象类型。您可以通过只获取登录名来解决此问题:$UserList=get-qaduser-sizelimit 0 |用于每个{$\uu.LogonName}
$users = @{}
Get-QADUser -sizelimit 0 | Foreach {$users["$($_.LogonName)"] = $true}
$dir = "\\ServerName\Share\"
Get-ChildItem $dir | Where {$_.PSIsContainer -and !$users["$($_.Name)"]}