【问题标题】:Powershell - check if cmdlet has parameterPowershell - 检查 cmdlet 是否有参数
【发布时间】:2022-04-13 18:47:35
【问题描述】:

是否可以确定某个 cmdlet 是否有一个确切的参数? 例如,如果我使用 Exchange 服务器,我知道设备的 Web 访问自 2013 版本以来就存在。所以在此版本之前,cmdlet 中没有相关参数。 是否可以使用 cmdlet,例如 New-Mailbox 并检查它是否具有一个确切的参数(该参数对于 2010 版本不存在,而对于 2013+ 则不存在)?

【问题讨论】:

    标签: powershell powershell-cmdlet


    【解决方案1】:

    这个问题已经很老了,但仍然...... :) 试试下面的代码来获取可用的 CmdLet 参数列表

    $params = (Get-Command New-Mailbox).ParameterSets | Select -ExpandProperty Parameters
    $params | ForEach {$_.Name}
    

    【讨论】:

      【解决方案2】:

      PowerShell $args 变量是调用中使用的参数数组。您可以使用 $args.Count 来验证所需的参数是否存在。您还可以使用 $args[0] 来测试第一个参数的值。

      迈克

      【讨论】:

        【解决方案3】:

        Pavel 的回答很好。这种方式稍微短一些,更容易阅读:

        (Get-Command cmdletName).Parameters['parameterName']
        

        此示例使用它来检查在 Exchange Server 2013 中添加的 EnableRoomMailboxAccount 参数的 New-Mailbox cmdlet(问题中描述的场景):

        if((Get-Command New-Mailbox).Parameters['EnableRoomMailboxAccount']) {
            New-Mailbox -UserPrincipalName confroom1010@contoso.com `
                -Alias confroom1010 `
                -Name "Conference Room 1010" `
                -Room `
                -EnableRoomMailboxAccount $true `
                -RoomMailboxPassword (ConvertTo-SecureString -String P@ssw0rd -AsPlainText -Force)
        }
        else {
            New-Mailbox -UserPrincipalName confroom1010@contoso.com `
            -Alias confroom1010 `
            -Name "Conference Room 1010" `
            -Room
        }
        

        【讨论】:

          猜你喜欢
          • 2021-05-14
          • 1970-01-01
          • 2010-11-15
          • 2010-12-05
          • 1970-01-01
          • 1970-01-01
          • 2020-10-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多