Seit Jahren habe ich die Shell cmd/DOS/Windows
verwendet und Befehlszeilenargumente an Batchdateien übergeben. Zum Beispiel habe ich eine Datei, zuzu.bat
und darin, ich greife auf %1
, %2
, etc. Nun möchte ich das gleiche tun, wenn ich ein PowerShell
Skript when I am in a Cmd.exe shell
aufrufen. Ich habe ein Skript, xuxu.ps1
(und ich habe PS1 zu meiner PATHEXT-Variable hinzugefügt und verknüpfte PS1-Dateien mit PowerShell). Aber egal, was ich tue, ich kann anscheinend nichts von der Variablen $args
bekommen. Es hat immer die Länge 0.So übergeben Sie Befehlszeilenargumente an eine PowerShell ps1-Datei
Wenn ich in einer Shell PowerShell
statt cmd.exe
bin, funktioniert es (natürlich). Aber ich bin noch nicht komfortabel genug, um in der PowerShell-Umgebung in Vollzeit zu leben. Ich möchte nicht powershell.exe -command xuxu.ps1 p1 p2 p3 p4
eingeben. Ich möchte xuxu p1 p2 p3 p4
eingeben.
Ist das möglich, und wenn ja, wie?
Die Probe ich nicht zur Arbeit bekommen kann, ist trivial, foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
Die Ergebnisse sind immer wie folgt aus:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
Ich denke, der Schlüssel in Ihrem Schritt 6, wo Sie in den Parametern zu Powershell passieren .exe. Daniel sagt, dass er PS1-Dateien mit PowerShell verknüpft hat, aber Argumente ohne die zusätzlichen% 1% * - Spezifikationen nicht übergibt. Beachten Sie auch, dass der Parameter "Datei" in V1 nicht verfügbar ist. Es ist neu in V2. –
Guter Fang bezüglich des Parameters -file hatte ich vergessen. – EBGreen
Ich muss V2 installieren, bevor ich Ihren Vorschlag ausprobieren kann. Vielen Dank.Wenn du sagst, dass dies ein grundlegendes Sicherheitsmerkmal durchbricht, was meinst du "dieses"? Ein PowerShell-Skript von Cmd.exe aufrufen, als wäre es eine .com/.bat/.exe-Datei? Parameter an das Skript übergeben? –