Masquage Des Erreurs Lors De L'Utilisation De Get-ADGroup
Je suis en train de travailler sur un script qui va créer un nouveau groupe si elle n'existe pas. Je suis à l'aide de Get-ADGroup assurez-vous que le groupe n'existe pas à l'aide de la commande suivante:
$group = get-adgroup $groupName -ErrorAction:SilentlyContinue -WarningAction:SilentlyContinue
Mais quand je le fais, j'obtiens l'erreur suivante (j'ai enlevé tout le domaine spécifique des données à partir de l'erreur):
Get-ADGroup : Cannot find an object with identity: '*group name*' under: '*domain*'.
At U:\Scripts\Windows\Create-FolderAccessGroup.ps1:23 char:24
+ $group = get-adgroup <<<< $groupName -ErrorAction:SilentlyContinue -WarningAction:SilentlyContinue
+ CategoryInfo : ObjectNotFound: (y:ADGroup) [Get-ADGroup], ADIdentityNot
FoundException
+ FullyQualifiedErrorId : Cannot find an object with identity: '' under: ''.,Microsoft.ActiveDirectory.Management.Commands.GetADGroup
Je suppose réglage ErrorAction et WarningAction à SilentlyContinue garderait cette erreur soit affiché, mais il n'a pas.
Je ne veux pas ce post comme une réponse parce que je n'ai aucune idée si ça fonctionne ou pas et je ne peux pas tester ça maintenant, mais essayez de la tuyauterie à l'extérieur Null.
donc
Qu'est ce que je voudrais essayer, mais comme je l'ai dit je ne suis pas sûr que cela fonctionnera.
Nope, même message d'erreur.
Bonne chose que je n'ai pas la mettre comme une réponse alors 🙂
donc
$group = get-adgroup $groupName | out-null
?Qu'est ce que je voudrais essayer, mais comme je l'ai dit je ne suis pas sûr que cela fonctionnera.
Nope, même message d'erreur.
Bonne chose que je n'ai pas la mettre comme une réponse alors 🙂
OriginalL'auteur Scott Keck-Warren | 2011-06-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez aussi rediriger la sortie vers $null, ou une pipe à l'extérieur null.
OriginalL'auteur mjolinor
Je trouve que cela fonctionne mieux:
Si le filtre ne retourne aucun résultat, alors $Groupe est simplement définie sur $null et aucun message d'erreur n'est généré. Aussi, depuis un nom de compte SAM doit être unique dans Active Directory, il n'y a pas de risque de $Groupe étant un tableau de plus d'un objet.
Je trouve que l'utilisation de Filtre pour obtenir le groupe plutôt que sur l'Identité fonctionne vraiment très bien lors de la vérification de l'existence de groupes (ou les utilisateurs) dans les instructions if. Par exemple:
Je trouve que c'est beaucoup plus facile de traiter avec logiquement (si le groupe existe, ajouter les utilisateurs; dans le cas contraire, l'affichage d'un message) que mjolinor la suggestion de try/catch avec l'aide de l'ADGroup applet de commande avec le paramètre-Identity. Envisager le try/catch méthode de faire la même chose que ci-dessus, en utilisant le paramètre-Identity:
Vous de voir si tout des commandes dans le bloc try renvoie une terminaison d'erreur. Si on le fait, cela signifie que le groupe n'existe pas et s'en aille et processus de la commande(s) dans le bloc catch. Cela va fonctionner, mais je ne pense pas que try/catch voici les flux ainsi, logiquement, en comparaison à si/d'autre.
Ne m'obtenez pas le mal, mjolinor est une PowerShell génie. C'est juste que dans ce cas, je ne pense pas que sa solution est la meilleure.
OriginalL'auteur Scott
@mjolinor donne la bonne réponse, mais je pense que quelques explications peuvent également aider.
Windows PowerShell propose deux mécanismes de signalement des erreurs: un mécanisme pour la résiliation des erreurs et un autre mécanisme pour non-terminaison erreurs.
Interne Applets de commande code peut appeler un
ThrowTerminatingError
méthode lorsqu'une erreur se produit qui n'est pas ou ne devrait pas permettre à l'applet de commande pour continuer à traiter ses objets d'entrée. Le script rédacteur pouvez utiliser exception pour attraper ces erreurs.Interne Applets de commande code peut appeler un
WriteError
méthode de rapport non-terminaison des erreurs lors de l'applet de commande peut continuer à traiter les objets d'entrée. L'auteur du script peut ensuite utiliser-ErrorAction
option pour masquer les messages.OriginalL'auteur JPBlanc
Je réalise que c'est vieux, mais j'ai aussi eu ce problème et l'a résolu comme ceci:
Si (Get-ADObject -Filtre {objectClass -eq "Groupe -et samAccountName -eq "groupname"}) { //faire quelque chose//}
OriginalL'auteur atguilmette