Parameter, die mit doppelten Anführungszeichen werden nicht richtig übergeben Scriptblock von ArgumentList
Ich Schreibe generisches powershell-Skript ausführen Bereitstellungen auf remote-Rechnern. Ich traf ein problem ich kann nicht überlaufen, und dieses problem ist mit den Parametern, die mit doppelten Anführungszeichen in Scriptblock übergeben ArgumentList
Ich habe so etwas wie dieses:
$remoteAddress = "some-pc"
$deploymentCommand = "D:\some path\Command.exe"
$deploymentPackages = @(`"“package - one - external"`", `"“package - two - external"`", `"“package - three - internal"`")
foreach ($deploymentPackage in $deploymentPackages)
{
invoke-command -ComputerName $remoteAddress -ScriptBlock { param ($deployCmd, $deployPackage) & $deployCmd -package:$deployPackage -action:doit } -ArgumentList $deploymentCommand,$deploymentPackage
}
Habe ich Hinzugefügt, doppelte Anführungszeichen in $deploymentPackages. Und trotzdem bin ich immer meinen Befehl ausgeführt, Fernwartung, wie dies (was natürlich fehlschlägt):
D:\some path\Command.exe -package:package - one - external -action:doit
D:\some path\Command.exe -package:package - two - external -action:doit
D:\some path\Command.exe -package:package - three - external -action:doit
während ordnungsgemäße Ausführung der Pfad sollte sein:
D:\some path\Command.exe -package:"package - three - external" -action:doit
ohne Anführungszeichen-Paket - eine - externe, die versauen everythig
Wie überlaufen dieses problem, weil ich getestet habe, Reihe von Lösungen und nicht von Ihnen arbeitete.
Danke für die Hilfe im Voraus!
InformationsquelleAutor Midi | 2013-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnten Sie so etwas tun
Diese bundles
-package:<some string here>
in ein einzelnes argument übergeben wird, um Ihre ausführbare Datei, die ist die gleiche wie etwas zu tun wie-package:"aaa bbb ccc"
im cmd.exe.Ich nehme an, Sie wollen nicht wörtliche Zitate an die exe, nur für
-package:<some string here>
ein einziges argument, unabhängig von Räumen in<some string here>
Wenn Sie möchten, dass wörtliche Zitate werden an die exe-Datei, verwenden Sie den obigen code, mit
InformationsquelleAutor latkin
Können Sie dieses Problem beheben, indem wenn Sie einfache Anführungszeichen verwenden, um wickeln Sie Ihre Saiten. Mit single-quotes wird der Inhalt zwischen den Anführungszeichen wird unberührt(Variablen nicht erweitern und Zeichen wie Anführungszeichen gehalten werden). E. g.
So, um das Skript, ersetzen Sie Ihre
deploymentpackages
array mit:InformationsquelleAutor Frode F.
Versuchen, einzelne Anführungszeichen um den string mit doppelten Anführungszeichen. Ich vereinfachte das Skript ein wenig zu schreiben Sie einfach die Zeichenfolge anstatt zu laufen.
InformationsquelleAutor thetreat
Verwenden
"""
. Zum Beispiel,$Var
zeigtOne
.Während
"""$Var"""
zeigtOne
InformationsquelleAutor Yonnatan Bar
Ich hatte das gleiche problem beim Versuch zu senden eine E-Mail von einem PowerShell-Skript aus aufgerufen, ein DOS-Skript. Ich verlor einige Zeit, um die folgende Lösung.
DOS-Skript
SendMail.bat-DOS-Skript
SendMail.ps1-PowerShell-Skript
Folgende Lösung ohne zwischengeschaltete DOS-Skript funktioniert auch
ist aber ein wenig schwierig, da müssen Sie " \ " am Anfang und Ende jeder Nachricht.
In allen Fällen der Titel meiner Nachricht richtig angezeigt werden, ohne doppelte Anführungszeichen zu Beginn und Ende der Nachricht 🙂
InformationsquelleAutor schlebe