4

PowerShell(PS)では、コマンドレットパラメーターを公式の構文で定義されている順序で使用することが重要ですか?

-cc既存のスクリプトでsend-mailMessageにパラメーターを追加しています。-ccすぐに追加しました-Toが、問題なく動作するので、十分に放っておく傾向があります。ただし、コマンドレットの唯一のパラメーターセットは、ヘルプテキストで次のように定義されています。

Send-MailMessage [-To] <String[]> [-Subject] <String> [[-Body] <String> ] [[-SmtpServer] <String> ] -From <String> [-Attachments <String[]> ] [-Bcc <String[]> ] [-BodyAsHtml] [-Cc <String[]> ] [-Credential <PSCredential> ] [-DeliveryNotificationOption <DeliveryNotificationOptions> ] [-Encoding <Encoding> ] [-Port <Int32> ] [-Priority <MailPriority> ] [-UseSsl] [ <CommonParameters>]

したがって、ベストプラクティスは、次のようなコマンドを実行することだと思います(subject、body、smtpserverの後にcc、ヘルプテキストの後にfrom):

send-mailmessage -to $mailTo -subject $mailSubj -body $msgbody -smtpserver smtp.domain.tld -from $mailFrom -cc $mailCC

...このようにではなく(他の多くのパラメーターの前にcc):

send-mailmessage -to $mailTo -cc $mailCC -subject $mailSubj -body $msgbody -smtpserver smtp.domain.tld -from $mailFrom

一般的に、私はこれについてあまり注意を払っていませんでした、そして、ものはうまくいきます。したがって、これらの行に沿って機能する既存のスクリプトに戻って調整することは、(エラーが発生しやすいことは言うまでもなく)やり過ぎでしょう。しかし、将来のスクリプトでは、今後のパラメーターの順序を尊重する価値があるのではないでしょうか。またはトラブルの価値はありませんか?何て言うの?

もちろん、どのパラメーターがデフォルトであるかについて誤った仮定をしてから、パラメーター名を省略したくはありません。この種のことはカスタム関数などで厄介になることも想像できます。しかし、私の質問は、send-mailMessage上記の例のように、ボックス内のコマンドレットのパラメーターに明示的に名前が付けられている、より単純なケースについてです。

4

1 に答える 1

6

コマンドレット(例)を呼び出すときにパラメーターに名前を付ける場合は、パラメーターGet-ChildItem -Path *.txtを指定する順序は関係ありません。すべてが名前で正確に指定されるため、引数を解決するためにパラメーターが指定された順序は必要ありません。

パラメータに名前を付けていない場合(たとえばGet-ChildItem *.txt)、それは重要です。コマンドレットの作成者は、特定のパラメーターを名前なしで特定の順序で期待できる/期待できることを指定できます。Powershellエンジンは、それを尊重するために最善を尽くします。一般に、名前のない引数を、まだ割り当てられていないパラメーターとペアにしようとします。

技術的な情報については、パラメータタイプに関するこのページを確認してください。

于 2012-10-26T18:35:57.600 に答える