次のことが可能かどうかわかりませんでした。それはそうではないように見えるが、私はコミュニティに尋ねると思った。スクリプトのパラメータバインドの順序を制御できますか?
のは、私はこのように、スクリプトパラメータの簡単な取り扱いを持っているとしましょう:
[CmdletBinding()]
Param(
[parameter(Position=0)]
[string] version,
[parameter(Position=1)]
[ValidateScript({ SomeModule/Search(version, $_); $true # FIND THIS VERSION IN SOURCE. **VERSION MUST HAVE BEEN SET BY NOW** })]
[string] source,
)
今、私たちは「バージョン」は、コンポーネントのバージョンを表し、「ソース」を検索するには、いくつかのソース(場所)を表して言うことができます(複数のソースになる可能性があります)。私が実際に検索(ソース、バージョン)と呼ぶことができる最も早いのはValidateScript {}であり、これは良いことです。検索(...)で何らかのエラーが発生した場合、他のパラメータの処理を続行しません。また、(...){}ステートメントがコードの後半にある場合は、パラメータが渡されたかどうかを確認してから何らかのアクションを実行する必要がある場合はの束を削除します。ただし、提供される値の順序は重要です。
これは問題ありません。値は正しい順序で提供されます
MyScript.ps1 -version 12345ABC -source 'filesystem'
これは問題ありません。値は正しい順序で供給されます。位置拘束が有効です。
MyScript.ps1 12345ABC 'filesystem'
これは機能しません。値は順序私はパラメータ名が使用されている場合、特定の順序を必要とするクライアントに制限をかけたくない
MyScript.ps1 -source 'filesystem' -version 12345ABC
(ビューのスクリプトロジック・ポイントから)間違っに供給されています。
回避策として、私は$ ARGSを再配置することができましたが、[CmdletBinding]の前にコードを作成することはできません。 $ ARGSで注文を変更し、MyScript.ps1を呼び出す新しいスクリプトを作成できました。これは素晴らしい解決策ではありませんが。私はPS 4.0を使用しています。
私は同じようにそれを呼び出すしたいと思います: 'ファイルシステム' -source -version 12345ABCまずはPSプロセスの変換を行ってください。 –
他のコメントから理解できれば、あなたの問題は実際には 'ValidateScript'であり、ファイルシステムの前にバージョンを指定しないとスクリプトは動作しませんか? –
はい、そうです。 ValidateScript for sourceはすでにバージョンが設定されていると予想しているので、 –