2016-04-19 7 views
0

Dies macht mich verrückt.For-EachObject Schleife iterative Variable Problem

Ich möchte ein Skript erstellen, das für alle Benutzer, deren Name mit "John" beginnt, eine Textdatei mit dem Benutzernamen und dem Namen des Benutzers erstellt. Hier

ist das Skript:

Get-ADUser -Filter {name -like "John*"} -Property Name, SamAccountName | 
ForEach-Object { 
    Get-ADUser -Filter {name -eq $_.Name} | 
    Select-Object -Property Name, SamAccountName | 
    Out-File "c:\PS\$_.Name.txt" 
} 

Dies funktioniert aber die out-Datei (en) Name ist nicht der Benutzer Name, sondern es ist seine ADsPath; CN=John Doe,OU=Users,DC=contoso,DC=local.Name.txt

Aus irgendeinem Grund löst die $_.Name nicht korrekt in der Out-Datei CMD-Let. $_ refrences das Objekt richtig, aber die .Name als nur String interpretiert

WriteHost $_.Name so funktioniert, warum nicht Out-File "C:\PS\$_.Name.txt"?

Antwort

1

"$_.Name" funktioniert nicht, da Sie sich in einer Zeichenfolge befinden - PowerShell erweitert nur die Variable, nicht Ihren beabsichtigten Ausdruck. Dafür wollen Sie "$($_.Name)". Alles innerhalb von $() wird als einzelner Ausdruck ausgewertet. Weitere Informationen finden Sie unter about_Quoting_Rules.

+0

Das war genau was ich wollte, wusste nur nicht, wie es geht :) Danke! –

0

gerade tun:

Out-File ("c:\PS\" + $_.Name + ".txt") 

Wie sollte wissen, wo kommt man powershell variable Blende und Ihren Text beginnen? Es ist nicht so schlau. Es sucht nach $ Symbol und betrachtet das Wort danach als Variable. Der ganze Rest ist Text. Sie können es mit Variablen verwenden, aber hier möchten Sie es mit der Eigenschaft einer Variablen verwenden.

+0

versuchten dieses, immer 'Out-File: Kann nicht Argument auf Parameter 'Encoding' validieren. Das Argument "+" gehört nicht zu der Menge "unknown, string, unicode, bigendianunicode, utf8, utf7, utf32, ascii, default, oem", die durch das ValidateSet-Attribut angegeben wird. –

+0

Sie müssen tun "(" c: \ PS \ "+ $ _. Name +" .txt ")' –

1

Nur Variablen werden in Zeichenfolgen, nicht in Eigenschaften erweitert. Um diese Arbeit machen Sie die $() Syntax verwenden müssen:

Out-File "c:\PS\$($_.Name).txt"