调用powershell cmdlet时参数顺序有多重要?

时间:2012-10-26 18:23:21

标签: powershell syntax parameters convention

在Powershell中,使用cmdlet参数在官方语法中定义它们的顺序是否重要?

我在现有脚本中将-cc参数添加到send-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

...而不是像这样(在许多其他参数之前的cc):

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

总的来说,我对这一点并不十分谨慎,而且事情很有效。所以回过头来调整功能现有的脚本肯定是有点过分(更不用说容易出错了)。但是,在未来的脚本中,也许值得尊重未来的参数顺序?还是不值得麻烦?你说什么?

当然你不想做出关于哪个参数是默认参数然后省略参数名称的错误假设;我还可以想象这种事情会变得混乱自定义函数等等。但我的问题是关于更简单的情况,当显式命名内置cmdlet的参数时,就像上面的send-mailMessage示例一样。 / p>

1 个答案:

答案 0 :(得分:5)

如果在调用cmdlet时命名参数(例如Get-ChildItem -Path *.txt),那么指定它们的顺序无关紧要。一切都是由名称精确指定的,因此提供参数的顺序是不需要解决争论。

如果您没有命名参数(例如Get-ChildItem *.txt),那么它确实很重要。 cmdlet作者可以按特定顺序指定某些参数可以/应该在没有名称的情况下预期。 Powershell引擎将尽力满足这一要求,并且通常会尝试将未命名的参数与尚未分配的任何参数配对。

查看MSDN page参数类型以获取更多技术信息。