私は.ps1 PowerShellスクリプトを書いていて、ユーザーが渡した引数の数をどのように見つけるのかと思っていました。たとえば、複数のファイルの文字列のチェックを処理するプログラムが必要です。したがって、ユーザーは入力できるはずです
./Script "a" ex1.txt
または
./Script "a" ex1.txt ex2.txt
バッシュでは$#
ですが、PowerShellでどのようにチェックインしますか?
スクリプトまたは関数内で、自動入力された$args
変数を介して渡された引数にアクセスできます。 $args
は配列なので、Count
プロパティを介して渡された引数の数を確認できます。
例:
function PrintArgs()
{
Write-Host "You passed $($args.Count) arguments:"
$args | Write-Host
}
PrintArgs
を呼び出しています:
> PrintArgs 'a' 'b' 'c'
You passed 3 arguments:
a
b
c
いくつかのヘルプファイルを読みます 時間がある場合。彼らは一般的に非常に役立ちます!
get-help *
get-help *parameters*
get-help about_Parameters
get-help about_Automatic_Variables
get-help about_Functions*
#etc...
あなたに役立つはずのヘルプからのメモ:
$ Args
関数、スクリプト、またはスクリプトブロックに渡される、宣言されていないパラメーターまたはパラメーター値、あるいはその両方の配列が含まれます。関数を作成するときは、paramキーワードを使用するか、関数名の後にかっこ内にパラメーターのコンマ区切りのリストを追加することにより、パラメーターを宣言できます。
イベントアクションでは、$ Args変数には、処理中のイベントのイベント引数を表すオブジェクトが含まれています。この変数は、イベント登録コマンドのアクションブロック内にのみ入力されます。この変数の値は、Get-Eventが返すPSEventArgsオブジェクト(System.Management.Automation.PSEventArgs)のSourceArgsプロパティにもあります。
$ PSBoundParameters
スクリプトまたは関数に渡されるパラメーターとその現在の値のディクショナリが含まれています。この変数は、スクリプトや関数など、パラメーターが宣言されているスコープでのみ値を持ちます。これを使用して、パラメーターの現在の値を表示または変更したり、パラメーター値を別のスクリプトまたは関数に渡したりできます。
バインドされたパラメータとバインドされていない引数の両方を使用することになる場合は、2つを組み合わせることができます( 例 )
少し外れたトピック:
$ argsの使用はお勧めしません。常にバインドされたパラメーターを使用する必要があります。それらを使用しないよう強制されるケースはほとんどありません。
どうして?パラメーターを受け取るすべての関数は、ベストプラクティスに従い、パラメーターにparam()ブロックを使用する必要があります。ヘルプファイルのパラメーターを確認すると、paramブロックを使用すると、検証、必須パラメーターの強制、パイプライン入力の受け入れなど、あらゆる種類の便利な機能が得られることがわかります。PowerShellで実行する前に、これも必要です。 [ cmdletbinding ()]を使用してさらに作業を行います
乾杯!
組み込みの$Args
とそのためのプロパティCount
。
$Args.Count
これにより、ユーザーがスクリプトに渡した引数の数がわかります。
OPの質問に正しく答えるには:
スクリプトの記述方法に応じて、パラメーター引数countを取得するための2つの可能性があります。
1) Powershellのナイスバインドパラメータ機能を使用:$PSBoundParameters.Count
2)バインドされたパラメーターを使用せず、引数カウントは次のとおりです:$Args.Count
また、注意してください:$ Argsパラメータ配列およびcountは、バインドされたパラメータを使用する場合は存在しません。