Powershell - Piping - zugriff auf Variable
JoshuaTree (Level 1) - Jetzt verbinden
24.02.2016, aktualisiert 13:51 Uhr, 1307 Aufrufe, 4 Kommentare
Hi,
ich habe eine Frage worauf ich mit Google keine für mich brauchbare schnelle Antwort gefunden habe.
Früher im command prompt (CMD) von Windows habe ich z.B. Folgendes gemacht.
Mit %a konnte ich dann eine Pipe bauen wie ich es brauchte und die Tokens mit %a oder %b und so weiter abfragen.
Dies hat mir z.B ein Liste an Server angepingt.
oder ein File kopiert
Jetzt sind wir bei Powershell und ich versuche etwas ähnliches mit:
hier bekomme ich aber immer nur "FALSE" zurück.
Zur Überprüfung der $_.Servername schreibe ich
Das funktioniert und ich bekomme jeden Eintrag sauber aufgelistet.
Mache ich etwas falsch? Oder geht das mit Powershell so nicht?
Kann mir jemand mal unter die Arme greifen?
ich habe eine Frage worauf ich mit Google keine für mich brauchbare schnelle Antwort gefunden habe.
Früher im command prompt (CMD) von Windows habe ich z.B. Folgendes gemacht.
for /f "tokens=1,2,3,4,5,*" %a in ("textfile") do @echo %a
Mit %a konnte ich dann eine Pipe bauen wie ich es brauchte und die Tokens mit %a oder %b und so weiter abfragen.
Dies hat mir z.B ein Liste an Server angepingt.
for /f "tokens=1,2,3,4,5,*" %a in ("textfile") do @echo %a|Ping %a
oder ein File kopiert
for /f "tokens=1,2,3,4,5,*" %a in ("textfile") do @echo %a|copy file.exe \\%a\c$\temp
Jetzt sind wir bei Powershell und ich versuche etwas ähnliches mit:
Get-XAServer -WorkerGroupName "Germany Worker"|% {Test-path \\$_.Servername\d$\APP-V\}
hier bekomme ich aber immer nur "FALSE" zurück.
Zur Überprüfung der $_.Servername schreibe ich
Get-XAServer -WorkerGroupName "Germany Worker"|% {Write-Output $_.servername}
Mache ich etwas falsch? Oder geht das mit Powershell so nicht?
Kann mir jemand mal unter die Arme greifen?
4 Antworten
- LÖSUNG 114757 schreibt am 24.02.2016 um 13:26:37 Uhr
- LÖSUNG JoshuaTree schreibt am 24.02.2016 um 13:45:48 Uhr
- LÖSUNG 114757 schreibt am 24.02.2016 um 13:48:45 Uhr
- LÖSUNG JoshuaTree schreibt am 24.02.2016 um 13:52:00 Uhr
- LÖSUNG JoshuaTree schreibt am 24.02.2016 um 13:45:48 Uhr
LÖSUNG 24.02.2016, aktualisiert um 13:35 Uhr
Oder geht das mit Powershell so nicht?
Mit Powershell geht alles Hiermit listest du z.B. alle Server bei denen der Pfad existiert...
Get-XAServer -WorkerGroupName "Germany Worker" | ?{Test-path "\\$($_.Servername)\d$\APP-V\"} | select -Expand Servername
Get-XAServer -WorkerGroupName "Germany Worker" | %{
if(Test-path "\\$($_.Servername)\d$\APP-V\"){
write-host "Pfad für Server $($_.Servername) existiert. Juhu."
}else{
write-host "Pfad für Server $($_.Servername) existiert nicht!"
}
}
Get-XAServer -WorkerGroupName "Germany Worker" | group {Test-path "\\$($_.Servername)\d$\APP-V\"}
Gruß jodel32
LÖSUNG 24.02.2016 um 13:45 Uhr
Vielen Dank erst mal.
Das funktioniert leider so noch nicht wie gewünscht.
Denn Test-Path gibt ja normal TRUE oder FALSE aus wenn ich den String abschicke bekomme ich nur die Ausgabe von Get-XAServer -Workergroup "Germany Worker"
Ich will ja auf jedem Server von $_.ServerName ein Test-path machen
Kann es sein das da noch etwas fehlt?
Mein Fehler lag also bei dem Fragezeichen das ich statt dem Prozentzeichen verwenden muss und der runden Klammer
Das funktioniert leider so noch nicht wie gewünscht.
Denn Test-Path gibt ja normal TRUE oder FALSE aus wenn ich den String abschicke bekomme ich nur die Ausgabe von Get-XAServer -Workergroup "Germany Worker"
Ich will ja auf jedem Server von $_.ServerName ein Test-path machen
Kann es sein das da noch etwas fehlt?
Mein Fehler lag also bei dem Fragezeichen das ich statt dem Prozentzeichen verwenden muss und der runden Klammer
LÖSUNG 24.02.2016, aktualisiert um 13:51 Uhr
Doch ...

Denn ein Test-Path gibt ja nur $true oder $false aus mehr nicht. Das prüfst du mit der IF-Abfrage.
Typische Powershell Anfängerfehler. Also am besten hier erst mal lesen ...
Denn Test-Path gibt ja normal TRUE oder FALSE aus
Normal.Ich will ja auf jedem Server von $_.ServerName ein Test-path machen
Kann es sein das da noch etwas fehlt?
Nein. Das ?{} ist die Abkürzung für ein sogenanntes Where-Object das alle Elemente in der Pipe überprüft und in meinem Beispiel nur die weitergibt bei denen das Ergebnis $true ist Kann es sein das da noch etwas fehlt?
Mein Fehler lag also bei dem Fragezeichen das ich statt dem Prozentzeichen verwenden muss und der runden Klammer
Nein, du hast in der %{} (For-Each-Schleife) einfach nur nicht auf True oder False geprüft, das hättest du mit einer IF-Abfrage machen müssen, siehe mein zweites Beispiel!Denn ein Test-Path gibt ja nur $true oder $false aus mehr nicht. Das prüfst du mit der IF-Abfrage.
Typische Powershell Anfängerfehler. Also am besten hier erst mal lesen ...
- http://www.powershellpraxis.de/
- http://www.msxfaq.de/code/powershell/powershell.htm
- https://www.administrator.de/wissen/powershell-for-runaways-part-i-76114 ...
- https://www.administrator.de/wissen/powershell-for-runaways-part-ii-8661 ...
- http://powershell.com/cs/
- http://powershell.com/cs/media/13/default.aspx
LÖSUNG 24.02.2016 um 13:52 Uhr
Vielen Dank Passt !
You make my day
You make my day