【问题标题】: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
}