1

複数のパラメーターを受け取るスクリプトがあり、適切なヘルプ コメント (.SYNOPSIS、.DESCRIPTION、.PARAMETER など) で文書化しました。私の組織内の複数のユーザーがこの PowerShell スクリプトを使用する予定です。一部のユーザーは PowerShell を知っていて、特定のパラメーター値を使用して PowerShell から呼び出します。また、一部のユーザーは PowerShell を知らず、Windows エクスプローラーでスクリプト ファイルを右クリックします。をクリックし、[PowerShell で実行] を選択します (パラメーターは既定値を使用します)。

私の難問は、一連の重複コードなしでpowershellでこれを行うための最良の方法です。私の見方では、これらは私のオプションです:

1 - すべてのパラメーターの既定値を提供する DoStuff.ps1 スクリプトを作成するだけです。これにより、Windows エクスプローラーから直接実行できますが、自分のスクリプトから関数として使用したい PowerShell ユーザーにとっては、次のように書く代わりに扱いにくいと感じます。

Do-Stuff param1 param1

彼らはやります:

.\DoStuff.ps1 param1 param2

2 - DoStuff.ps1 内で、実行する操作を DoStuff 関数に移動し、関数宣言の後に、スクリプトに渡されたパラメーターを使用して DoStuff 関数を呼び出します。これにより、Windows エクスプローラーからスクリプトを実行できるようになり、開発者はスクリプトを独自のスクリプトにドット ソース化して関数にアクセスできるようになります。欠点は、開発者がスクリプトをドットソースすると、スクリプトがデフォルトのパラメーターで関数を呼び出すことです (関数が呼び出されないようにするスクリプトにオプションの Switch パラメーターを提供することを許可しない限り)。ただし、これを使用しても、スクリプトと関数 (説明、パラメーターの説明など) の両方が表示されるように、すべてのスクリプトのヘルプ テキストを複製する必要があります。

他の選択肢は考えられません。理想的には、関数を .ps1 ファイルに記述し、関数に "default" キーワードをタグ付けして、スクリプトが呼び出された場合にその関数がデフォルトで実行されるようにするだけです。しかし、PowerShell がこのようなものを提供するとは思いません。

この状況での最善のアプローチは何だと思いますか。私が見落としていることや知らないことはありますか?ありがとう。

4

1 に答える 1

3

しかし、独自のスクリプトから関数として使用したいpowershellユーザーにとっては扱いにくいと感じます

あなたの説明に基づいて、デフォルトのパラメータは最良の(または少なくとも少なくとも悪い)アプローチのようです。

ただし、スクリプトDoStuff.ps1に名前を付けて呼び出すのではなく、内部関数のように呼び出すことができます。

  • ダッシュで名前を付けます。Do-Stuff.ps1
  • 指定する必要はありません。ps1
  • スクリプトが のフォルダーにある場合は$env:Path、パスを指定する必要はありません。

また、スクリプトが相対パスからモジュールをロードできることも考慮してください。フロントエンド (右クリック) スクリプトがロードして呼び出すスクリプト モジュールにほとんどのコードを配置できます。スクリプトの作成者は、モジュール自体をロードします。

于 2013-03-14T10:33:03.020 に答える