2016-06-20 5 views
0

Windows 7のPowerShellスクリプトに単一のコマンドライン引数を渡そうとしましたが、スクリプトが引数を認識していないようです。それは私がコマンドラインで使用して、空であることに起因$args[0]に失敗し、何も出力せずに何があってもPowerShellスクリプトは引数を受け取りません

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

以下の最初のラインを介して爆発します。しかし、スクリプトの残りの部分は、代わりにコマンドラインから割り当てようとしている変数の値をハードコードするだけです(単にそのファイルを開き、何かを実行する)。

私は特に受け入れ答えでリンクすることによって、この答えPassing a variable to a powershell script via command lineに触発され、試してみましたparamブロックを使用したが、それは同様に

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

script.ps1 -filename SampleFile.txt

のように呼び出されたものをプリントアウトしませんでしたリンクの最初のスクリプトをコピーして新しいスクリプトに貼り付けます:

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

とし、それを1.ps1 1 2 3と呼びます。出力はNum Args: 0です。

私は間違っていますか?

PS:それは重要な場合は、ここで私は、同様にこの問題を持っているバージョン情報

PS Z:\> $PSVersionTable.PSVersion 

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

[mcve]を提供できますか?説明した動作をコードで再現することはできません。 – PetSerAl

+0

私は最小限の完全な例を提供しましたが、これは動作するはずです。しかし、それは私のためには機能しません。この質問の目的は理由を理解することです。残念ながら、これは私のためにはうまくいかないので、検証可能な例の要件を満たす方法がありません。 – ajeh

答えて

0

です。私が以前にしたことを回復するまでにはしばらく時間がかかりました。

最初のアプローチ:

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 

しかし、これはおそらく、Windows 7または上位に動作しません。必ず連想を行い、ftype%PATHEXT%はPowerShell用に設定されています。

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

設定し、それから

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

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

幸運:

は、その後、レジストリ(すべての注意はここに適用されます)

編集レジストリキーを編集します!

+0

PSコマンドプロンプトでPS1スクリプトを実行すると、それは問題になるのでしょうか?私はそれが通常のコマンドプロンプトから実行されると問題になると思います(私はそれを試していません)... – ajeh

関連する問題