2016-06-20 11 views
0

Es wird versucht, ein einzelnes Befehlszeilenargument an ein Powershell-Skript unter Windows 7 zu übergeben, aber das Skript scheint keine Argumente zu erkennen. Es sprengt durch die ersten Zeilen unterPowerShell-Skript erhält keine Argumente, egal was passiert

foreach($arg in $args) 
{ 
    Write-Host "Arg: $arg"; 
} 

ohne etwas ausgibt, das ich auf der Kommandozeile verwenden und nicht aufgrund $args[0] leer zu sein. Der Rest meines Skripts funktioniert jedoch, wenn ich stattdessen den Wert der Variablen, die ich über die Befehlszeile zuweisen möchte, fest codiere (er öffnet einfach diese Datei und tut etwas).

ich von dieser Antwort wurde inspiriert Passing a variable to a powershell script via command line speziell durch den Link in der Antwort akzeptiert und versucht, mit param Block, aber das hat nichts auszudrucken sowie

param(
    [string]$fileName 
) 
Write-Host "Filename: [ $fileName ]"; 

wenn wie script.ps1 -filename SampleFile.txt aufgerufen

Wenn Ich kopiere einfach das erste Skript von der Verbindung in ein neues Skript:

und nennen es sein Ausgang ist nur Num Args: 0.

Was mache ich falsch?

PS: Wenn es hier ankommt, ist die Versionsinformationen

PS Z:\> $PSVersionTable.PSVersion 

Major Minor Build Revision 
----- ----- ----- -------- 
2  0  -1  -1 
+0

Können Sie [mcve] bereitstellen? Ich kann das beschriebene Verhalten nicht mit Ihrem Code reproduzieren. – PetSerAl

+0

Ich habe das minimale, vollständige Beispiel zur Verfügung gestellt, und ich verstehe vollständig, dass dies funktionieren soll. Aber es funktioniert nicht für mich und der Zweck dieser Frage ist herauszufinden, warum. Da dies bei mir nicht funktioniert, kann ich Ihre Anforderung an das Beispiel nicht nachprüfbar erfüllen. – ajeh

Antwort

0

ich dieses Problem auch haben. Es hat eine Weile gedauert, bis ich das wiedergefunden habe, was ich vorher gemacht habe.

Erster Ansatz: stellen Sie sicher, assoc, ftype und %PATHEXT% für Powershell festgelegt sind:

C:\>assoc .ps1 
.ps1=Microsoft.PowerShellScript.1 

C:\>ftype Microsoft.PowerShellScript.1 
Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -noexit -file %1 %~2 

C:\>echo %PATHEXT% 
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.py;.pyw;.ps1 

Aber das wird wahrscheinlich nicht in Windows 7 oder höher arbeiten.

bearbeiten dann die Registrierung (alle Vorsichtsmaßnahmen gelten hier)

Bearbeiten Sie den Registrierungsschlüssel:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\0\Command 

Set aus

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-file" "%1" 

Um

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-file" "%1" %~2 

Viel Glück !

+0

Ist das alles wichtig, wenn ein PS1-Skript unter PS-Eingabeaufforderung ausgeführt wird? Ich würde erwarten, dass das wichtig ist, wenn es von einer normalen Eingabeaufforderung aus ausgeführt wird (nicht dass ich das versucht habe) ... – ajeh