Benutzer mit den meisten Antworten
Invoke-Command und Leerzeichen in Pfadangaben

Frage
-
Hallo,
ich habe das Problem das ich remote die Version einer Executable abfragen will. Also so etwas hier:
(Get-ChildItem -File "C:\Pfad1\name vom Executable.exe" | Get-ItemProperty).VersionInfo.ProductVersionDas funktioniert leider nicht wenn ich diese Information mittels
$local:version = Invoke-Command -ComputerName $HostName-ScriptBlock $scrBlck
Das Problem liegt an dem Leerzeichen im Pfad. bei kompletten Pfaden ohne Whitespace funktioniert das tadellos.
Hat jemand einen Tipp wie ich den Remote-Aufruf auch mit Whitespaces im Pfad hinbekommen kann? Mir fällt nichts mehr ein.
Vielen Dank im Voraus und einen schönen Abend.
- Bearbeitet www.IT-Viehmann.de Donnerstag, 21. Januar 2016 16:53
Antworten
-
Ich rate einfach mal ins blaue deine Version sieht vermutlich so ähnlich aus? Sprich die Variable wird ausserhalb des Script Blocks definiert:
$HostName = 'DC2016' $File = 'C:\test path\calc.exe' $scrBlck = { (Get-ChildItem -File $File | Get-ItemProperty).VersionInfo.ProductVersion } Invoke-Command -ComputerName $HostName -ScriptBlock $scrBlck
Falls ja, dann hat dein Problem nichts mit Leerzeichen zu tun, sondern damit das die Variable File innerhalb des Script Block eine andere ist als ausserhalb, Stichwort Scopes/Sichtbarkeit von Variablen. Hierfür bietet Invoke-Command den ArgumentList Parameter. Die übergebenen Variablen wird innerhalb des Script Blocks dann mit $args angesprochen. Bei mehreren übergeben Variablen handelt es sich hierbei um ein Array und die verschiedenen Variablen können dann entsprechend über $args[i] angesprochen werden.
$HostName = 'DC2016' $File = 'C:\test path\calc.exe' $scrBlck = { (Get-ChildItem -File $args[0] | Get-ItemProperty).VersionInfo.ProductVersion } Invoke-Command -ComputerName $HostName -ScriptBlock $scrBlck -ArgumentList $File
Falls diese Annahme nicht zutrifft, wäre Quellcode (zumindestens die relevanten Teile oder eine vereinfachte Version) und eine eventuelle Fehlermeldung bzw. das eintretende Verhalten hilfreich.
Gruß Olaf
- Bearbeitet Olaf Reitz Freitag, 22. Januar 2016 18:13
- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 28. Januar 2016 06:19
Alle Antworten
-
Hallo,
wie sieht denn der ScriptBlock aus der Ausgeführt werden soll? Und welche Fehlermeldung erhälst du?
Bei mir funktioniert es mit folgendem Code einwandfrei:
$HostName = 'DC2016' $scrBlck = { (Get-ChildItem -File "C:\test path\calc.exe" | Get-ItemProperty).VersionInfo.ProductVersion } Invoke-Command -ComputerName $HostName -ScriptBlock $scrBlck
Gruß, Olaf
- Bearbeitet Olaf Reitz Donnerstag, 21. Januar 2016 18:26
-
Hallo Olaf,
ich übergebe UNC-Pfade in einer Variable. Diese enthalten Leerzeichen. Also so:
$p = "C:\test path\calc.exe"
(Get-ChildItem -File p$ | Get-ItemProperty).VersionInfo.ProductVersion
Ich brauche eine Funktion die das auf einer Reihe von Servern macht.
-
Ich rate einfach mal ins blaue deine Version sieht vermutlich so ähnlich aus? Sprich die Variable wird ausserhalb des Script Blocks definiert:
$HostName = 'DC2016' $File = 'C:\test path\calc.exe' $scrBlck = { (Get-ChildItem -File $File | Get-ItemProperty).VersionInfo.ProductVersion } Invoke-Command -ComputerName $HostName -ScriptBlock $scrBlck
Falls ja, dann hat dein Problem nichts mit Leerzeichen zu tun, sondern damit das die Variable File innerhalb des Script Block eine andere ist als ausserhalb, Stichwort Scopes/Sichtbarkeit von Variablen. Hierfür bietet Invoke-Command den ArgumentList Parameter. Die übergebenen Variablen wird innerhalb des Script Blocks dann mit $args angesprochen. Bei mehreren übergeben Variablen handelt es sich hierbei um ein Array und die verschiedenen Variablen können dann entsprechend über $args[i] angesprochen werden.
$HostName = 'DC2016' $File = 'C:\test path\calc.exe' $scrBlck = { (Get-ChildItem -File $args[0] | Get-ItemProperty).VersionInfo.ProductVersion } Invoke-Command -ComputerName $HostName -ScriptBlock $scrBlck -ArgumentList $File
Falls diese Annahme nicht zutrifft, wäre Quellcode (zumindestens die relevanten Teile oder eine vereinfachte Version) und eine eventuelle Fehlermeldung bzw. das eintretende Verhalten hilfreich.
Gruß Olaf
- Bearbeitet Olaf Reitz Freitag, 22. Januar 2016 18:13
- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 28. Januar 2016 06:19