Essaye de déterminer s'il y a des dossiers d'utilisateurs sur le réseau qui n'ont pas de compte d'utilisateur associé. Tous les résultats retournent "Missing" quand la majorité devrait retourner "Found". Des idées?Powershell - Recherche et comparaison de tableaux avec les CMDlets Quest
$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! Bien que je ne comprenne pas encore complètement votre code, ça fonctionne vraiment! Merci à vous deux pour votre contribution. Désolé je suis un Noob Stack Overflow et je ne peux pas vous voter encore! –
Essentiellement, le $ users = @ {} crée une hashtable (ou un dictionnaire). La deuxième ligne remplit ce dictionnaire avec tous les noms d'ouverture de session utilisateur et la valeur $ true. Ensuite, dans la dernière ligne, nous analysons chaque dossier et vérifions si son nom (pas le chemin complet) est dans la hashtable. Si ce n'est pas le cas, vous avez un dossier orphelin. –
C'est une bien meilleure solution. Mais votre code précédent ne fonctionne pas car $ UserList contient en fait une collection de PSObjects avec une propriété "LogonName". Donc, votre instruction "if" essaie de comparer une collection PSObject à une chaîne, et donc de ne pas faire de correspondance. Dans tout environnement OO, vous devez connaître le type d'objets que vous comparez. Vous pouvez résoudre ce problème en obtenant simplement les noms de connexion à la place: $ UserList = get-qaduser -sizelimit 0 | pour chaque {$ _. LogonName} – JasonMArcher