条件powershell参数

jum*_*mbo 11 parameters powershell function conditional-statements

有没有办法在powershell函数中根据某些条件(例如:如果其中一个参数不存在或为false)强制使用某些参数?

我的想法是能够以两种方式调用函数.具体示例是从sharepoint获取列表的函数 - 我应该能够使用列表相对URL(一个且唯一的参数)或者使用web url和列表显示名称(两个参数,两者都是必需的,但仅当列表相对URL是不曾用过).

我希望我的问题很明确.

And*_*ndi 12

正如Christian所说,这可以通过ParameterSetNames来完成.看看这个例子:

function Get-MySPWeb {
    [CmdletBinding(DefaultParameterSetName="set1")]
    param (
        [parameter(ParameterSetName="set1")] $RelativeUrl,
        [parameter(ParameterSetName="set2")] $WebUrl,
        [parameter(ParameterSetName="set2", Mandatory=$true)] $DisplayName
    )
    Write-Host ("Parameter set in action: " + $PSCmdlet.ParameterSetName)
    Write-Host ("RelativeUrl: " + $RelativeUrl)
    Write-Host ("WebUrl: " + $WebUrl)
    Write-Host ("DisplayName: " + $DisplayName)
}
Run Code Online (Sandbox Code Playgroud)

如果你运行它将-RelativeUrl Foo绑定到"set1".如果在没有参数的情况下调用此函数,它也将绑定到"set1".

(注意 - 当PowerShell v3中没有提供参数时(使用Win8使用者预览版),它将绑定到"set1",但是它会在PowerShell v2中绑定错误,除非你添加[CmdletBinding(DefaultParameterSetName="set1")]到param块.感谢@ x0n为DefaultParameterSetName提示!)

如果您尝试使用两个集中的参数值运行它,您将收到错误.

如果你用-WebUrl Bar它运行它将提示你输入DisplayName的参数值,因为它是一个必需参数.