Powershell - Piping - zugriff auf Variable
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 297220
Url: https://administrator.de/forum/powershell-piping-zugriff-auf-variable-297220.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
4 Kommentare
Neuester Kommentar
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
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 ...