【问题标题】:How important is parameter order when calling powershell cmdlets?调用 powershell cmdlet 时参数顺序有多重要?
【发布时间】:2012-10-17 00:56:43
【问题描述】:

在 PowerShell (PS) 中,按官方语法中定义的顺序使用 cmdlet 参数是否重要?

我正在将-cc 参数添加到现有脚本中的send-mailMessage。我在-To 之后立即添加了-cc,它工作得很好,所以我倾向于独自离开。但该cmdlet的唯一参数集在帮助文本中定义如下:

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>]

所以我认为最佳做法是运行这样的命令(cc 在主题、正文、smtpserver 和 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

总的来说,我对此并没有特别小心,而且这些东西都有效。因此,按照这些思路返回并调整现有的功能脚本肯定是矫枉过正(更不用说容易出错了)。但也许值得在未来的脚本中尊重参数顺序?还是不值得麻烦?你说什么?

当然,您不希望对哪个参数是默认参数做出错误的假设,然后省略参数名称;我也可以想象这种事情会因自定义函数等而变得混乱。但我的问题是关于更简单的情况,即显式命名内置 cmdlet 的参数时,如上面的send-mailMessage 示例。

【问题讨论】:

    标签: powershell syntax parameters conventions


    【解决方案1】:

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

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

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

    【讨论】:

    • 链接已损坏,很想看看如何准确地“指定某些参数可以按特定顺序预期”。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多