ネットワーク上にユーザーアカウントがないユーザーフォルダがあるかどうかを確認しようとしています。大部分が「Found」を返すべきときに、すべての結果は「Missing」を返します。何か案は?コレクション内のアイテムは、あなたがそう$ Folder.NameがLogonNameとまったく同じであることを確認してくださいテストしているものと同じである場合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
}
}
Genius!私はあなたのコードを完全に理解していませんが、間違いなく動作します!お互いに感謝しています。申し訳ありませんが、私はスタックオーバーフローのnoobですし、まだあなたを投票することはできません! –
Essentialy $ users = @ {}はハッシュテーブル(または辞書)を作成します。 2行目は、すべてのユーザーログオン名と値$ trueでその辞書にデータを埋め込みます。最後の行では、各フォルダをスキャンし、その名前(フルパスではない)がハッシュテーブルにあるかどうかを確認します。そうでない場合は、孤立したフォルダがあります。 –
これははるかに良い解決策です。しかし、$ UserListには実際には "LogonName"プロパティを持つPSObjectのコレクションが含まれているため、前のコードは機能しません。したがって、 "if"ステートメントはPSObjectコレクションをStringと比較しようとしているため、一致しません。どんなOO環境でも、あなたはどのタイプのオブジェクトを比較しているのか知っていなければなりません。代わりにログオン名を取得することでこれを修正できます:$ UserList = get-qaduser -sizelimit 0 | for-each {$ _。LogonName} – JasonMArcher