2013-03-06 1 views
1

Je suis tombé sur une erreur étrange dans un script PowerShell qui retourne pour moi les ordinateurs dans Active Directory dans une unité d'organisation (et sous UO) spécifique qui sont activés et connecté sur à une certaine date.Get-ADComputer paramètre -filter ne pas accepter la sortie Get-Date

L'extrait suivant fonctionne:

$date = (get-date).AddDays(-100) 
Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $date)} -Properties lastLogonTimestamp -SearchBase "CN=Computers,DC=some,DC=domain,DC=com" 

... mais je d'abord tenté de le faire est une ligne:

Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $((get-date).AddDays(-100)))} -Properties lastLogonTimestamp -SearchBase "CN=Computers,DC=some,DC=domain,DC=com" 

... mais j'ai reçu à plusieurs reprises l'erreur ci-dessous (qui m'a fait essayer l'exemple de deux lignes ci-dessus):

Get-ADComputer : Cannot process argument because the value of argument "path" is not valid. Change the value of the "path" argument and run the operation again. 
At line:1 char:1 
+ Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $((ge ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Get-ADComputer], PSArgumentException 
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.Management.Automation.PSArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADComputer 

J'ai exécuté le script sur Windows 8 et Wind Server 2008 R2 - les deux avec PowerShell v3. Je suppose que le module Active Directory installé par les outils RSAT sur les deux systèmes d'exploitation peut également être des versions légèrement différentes.

données-sage j'ai obtenu ce que je dois, mais je suis perplexe pourquoi le one-liner ne fonctionne pas. L'argument "path" n'est pas requis pour les applets de commande Get-Date ou Get-AdComputer, mais pour essayer, j'ai également vérifié que mon répertoire de travail est C :. Je suis intéressé si quelqu'un peut être capable de fournir un aperçu de la raison pour laquelle cela pourrait être - J'ai déjà utilisé ce type de syntaxe dans des cmdlets de modules non-ActiveDirectory, donc je suis enclin à supposer que parce que le query est dans le paramètre "filter" peut-être que cela est transmis de manière incorrecte à la cmdlet Get-AdComputer elle-même (et c'est quelque chose que nous devons tous vivre avec).

Répondre

0

La partie droite d'un élément de filtre doit être une valeur, et non pas une expression.

La solution (comme vous avez déjà trouvé vous-même) est d'attribuer la valeur produite par l'expression à une variable, et utiliser cette variable sur le côté droit du filtre:

$date = (get-date).AddDays(-100) 
Get-ADComputer -Filter {(enabled -eq "true") -and (lastLogonTimestamp -gt $date)} ... 
+0

Avez-vous un lien de documentation? « Help about_filter » ne fonctionne pas pour moi et Technet n'est pas rien montrer, mais je vois des références à dans d'autres messages et articles (par exemple [about_ActiveDirectory_Filter] (http://technet.microsoft.com/en-us /library/hh531527(v=ws.10).aspx)) –

+0

'Get-Help Get-ADComputer -detailed' montre la [BNF] (http://en.wikipedia.org/wiki/Backus%E2%80% 93Naur_Form) pour la syntaxe du filtre. Selon cela, un composant de filtre est défini comme suit: :: = | "(" ")" ''. –

+1

Excellent, ça explique beaucoup. Appréciez votre temps –

Questions connexes