joshuatree
Goto Top

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.

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}  
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?

Content-Key: 297220

Url: https://administrator.de/contentid/297220

Printed on: April 19, 2024 at 12:04 o'clock

Mitglied: 114757
114757 Feb 24, 2016 updated at 12:35:37 (UTC)
Goto Top
Oder geht das mit Powershell so nicht?
Mit Powershell geht alles face-smile
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  
oder auch eine ausführlich geschriebene Variante mit If-Abfrage des Pfades
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!"  
  }
}
Du kannst die Server auch nach Verfügbarkeit des Pfades gruppieren
Get-XAServer -WorkerGroupName "Germany Worker" | group {Test-path "\\$($_.Servername)\d$\APP-V\"}   
usw. und sofort ... wie du lustig bist.

Gruß jodel32
Member: JoshuaTree
JoshuaTree Feb 24, 2016 at 12:45:48 (UTC)
Goto Top
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
Mitglied: 114757
Solution 114757 Feb 24, 2016 updated at 12:51:35 (UTC)
Goto Top
Zitat von @JoshuaTree:
Das funktioniert leider so noch nicht wie gewünscht.
Doch ...
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 face-wink

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 ...

Member: JoshuaTree
JoshuaTree Feb 24, 2016 at 12:52:00 (UTC)
Goto Top
Vielen Dank Passt !

You make my day face-wink