web-dev-qa-db-ja.com

PowerShell 2.0および「「Param」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません」

Windows 7 RTMを実行しています。 PowerShell 2.0はデフォルトでインストールされます。私はスクリプトを編集するために優れたWindows PowerShell ISE を使用しています。次のスクリプトがあります。

Param($p)
Param($d)
echo $p $d

スクリプトをSayItAgain.ps1として保存します。次のように対話型シェルからこのスクリプトを実行しようとすると:

./SayItAgain -p "Hello"

次のエラーが表示されます。

「Param」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれていた場合は、パスが正しいことを確認してから再試行してください。

At C:\users\cius\Code\powershell\SayItAgain.ps1:2 char:6
+ Param <<<< ($destination)
    + CategoryInfo          : ObjectNotFound: (Param:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

これは既知の問題ですか、それとも単に間違って使用していますか?

40
John Ingle

私は問題を解決しました。問題の説明を修正して正確にしました。

問題の原因は、Paramキーワードを誤って複数回使用していたことです。正しい使用法は、次のように単一のParam宣言内で複数のパラメーターを宣言することです。

Param($p, $d)

この使用法は、Windows PowerShellヘルプ記事「about_Functions」で説明されています。

35
John Ingle

param($p)が、Paramエラーを引き起こす可能性のあるスクリプトの最初の行でない場合。

param($p)が最初の行であることを確認してください。

70

このスクリプトを実行すると、

cls

param([string]$Url, [string]$Template="CMSPUBLISHING#0")

Write-Host "Url: $Url"  

同じエラーが出ました

「param」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれていた場合は、パスが正しいことを確認してから再試行してください。

一番上にあるclsをコメントアウトすると、うまくいきました。

#cls 

param([string]$Url, [string]$Template="CMSPUBLISHING#0")

Write-Host "Url: $Url"
2
Paul Rowland