2012-10-26 41 views
3

在PowerShell中,是重要的使用cmdlet的參數中,他們在正式的語法定義的順序?調用powershell cmdlet時參數順序有多重要?

我加入了-cc參數來發送,在MAILMESSAGE現有腳本。我在-To之後立即添加了-cc,它工作得很好,所以我傾向於單獨離開。但該cmdlet的唯一參數集在幫助文本中定義如下:

Send-MailMessage [-To] [-Subject] [[-Body]] [[-SmtpServer]] -From [-Attachments] [ - Bcc] [-BodyAsHtml] [-Cc] [-Credential] [-DeliveryNotificationOption] [-Encoding] [-Port] [-Priority] [-UseSsl] []

因此,我認爲最佳做法是運行像這樣的命令(在主題,正文,SMTPSERVER CC,並從以下幫助文本):

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

...而不是像這樣(其中許多其他參數的前立方厘米):

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

一般來說,我一直沒超小心這一點,和東西的作品。所以肯定會是矯枉過正(更不用說容易出錯),可以沿着這些路線返回並調整現有的功能腳本。但是在未來的腳本中,值得尊重參數順序呢?還是不值得麻煩?什麼說你?

當然你不想做一個壞的假設哪些參數是默認,然後忽略該參數名稱;我也可以想象這種事情會讓自定義函數或類似的東西變得混亂。但是我的問題是關於更簡單的情況,當一個現成的cmdlet的參數被明確命名時,就像上面的send-mailMessage例子那樣。

回答

5

如果您在調用cmdlet時命名參數(例如Get-ChildItem -Path *.txt),那麼指定它們的順序並不重要。所有內容都是按名稱指定的,所以提供params的順序並不需要解決爭論。

,如果你不命名您的參數(例如Get-ChildItem *.txt),那麼它很重要。 cmdlet作者可以指定某些參數可以/應該是預期的,沒有名稱,按照特定的順序。 PowerShell引擎將盡最大努力去實現這一目標,並且通常它會嘗試將未命名的參數與任何尚未分配的參數進行配對。

時退房MSDN page上的參數類型多一些技術信息。

相關問題