私はPowerShellを初めて使い慣れていますが、Windowsマシン上で多くのタスクを自動化するのが大好きです。私はあなたが他のスクリプトから関数を呼び出すことができるのは大好きですが、私が書いたスクリプトはすべてユーザーが提供できるパラメータを使用しています(同僚がそれらを使うのは簡単です)。Powershellがスクリプトに必須のパラメータがある場合に関数を呼び出す
スクリプトには通常必須のパラメーターが1つあります。私が直面している問題は、必須パラメータを持つスクリプトから関数を呼び出すことです。あなたが-VirtualMachine "VMnameHere" -Attempts 123
を提供するスクリプトとしてこれを実行する
Param(
[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$VirtualMachine=$(throw "Machine name missing!"),
[int]$Attempts = 150
)
Function DoSomething($VirtualMachine, $Attempts){
write("$VirtualMachine and $Attempts")
}
:
は、ここで簡単な例を示します。これを実行するとVMnameHere and 123
が生成されます。完璧!私はここに
例...別のスクリプトから関数としてこれを呼び出そうとした場合しかし..:
. ".\Manage-Machine.ps1"
DoSomething -VirtualMachine "nwb-thisisamachine" -Attempts 500
これは、エラーを生成:
フィールドがあるので、明らかであるMachine name missing!
At C:\Users\something\Desktop\Dump\play\Manage-Machine.ps1:33 char:28
+ [string]$VirtualMachine=$(throw "Machine name missing!"),
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Machine name missing!:String) [], RuntimeException
+ FullyQualifiedErrorId : Machine name missing!
必須です。この場合関数の呼び出し方法が間違っていますか?それが属しているスクリプトが必須パラメータを持っている場合、関数を呼び出す別の方法があります。なぜなら、パラメータの検証を取り除くと、それがすべて機能するからです。
いくつかの入力を大好きだ、
ありがとうございました!
ps1ファイルに関数を呼び出す行がありますか?あなたのサンプルは出力を生成すべきではないからです。それでは、ps1を呼び出してあなたの引数を提供してください。 – Matt
'[parameter(Mandatory = $ true)]'を使用して '= $を取り除くと(Machine name missing!)' –
@Mattいいえ、現時点では、関数を(必須のパラメータなしで記述したように)呼び出すと、うまく動作します。スクリプトを実行すると正常に動作しますが、実際には1つのスクリプトで複数の関数を実行してから、スクリプト全体を実行するのではなく、別のスクリプトで関数を呼び出す必要があります。最後に呼び出された関数を実行すると、一度に関数を使用することはできません。 –