PowerShell函数,它接受具有相同名称但值不同的多个参数

时间:2018-06-08 09:31:51

标签: powershell

Function SetPersonAttributes 
{
    [CmdletBinding()]
    Param (
            [Parameter(Mandatory=$true)][string]$PersonID,
            [Parameter(Mandatory=$false)][string]$FirstName,
            [Parameter(Mandatory=$false)][string]$MiddleName,
            [Parameter(Mandatory=$false)][string]$LastName,
            [Parameter(Mandatory=$false)][string]$FullName,
            [Parameter(Mandatory=$false)][string]$UserLogonName,
            [Parameter(Mandatory=$false)][string]$EmployeeNumber,
            [Parameter(Mandatory=$false)][string]$EmailAddress  
    )

    If ($FirstName)
    {
        $Body = @{
            name = FirstName
                textValue = @{
                    value = $FirstName
                }
            }

        $SetPersonAttributes = id_query -action SetPersonAttributes -PersonID $PersonID -Body $Body
    }

    If ($LastName)
    {

        $Body = @{
            name = LastName
                textValue = @{
                    value = $LastName
                }
            }

        $SetPersonAttributes = id_query -action SetPersonAttributes -PersonID $PersonID -Body $Body
    }



SetPersonAttributes -PersonID "1234" -FirstName "John" -LastName "Doe" -EmployeeID "9876"

我正在尝试构建可在许多环境中使用的通用脚本。 上述方法的问题在于,属性名称在每个环境中都不一定相同。 例如。在一个环境中,它可以是“FirstName”,而在另一个“名字”中 或“EmployeeNumber”和“EmployeeID”

对于每个属性,都需要创建一个IF语句。不太可扩展。

因此我正在研究创建一个接受泛型参数的函数。 例如

SetPersonAttributes -PersonID "1234" -AttributeName "FirstName" -Value "John" -AttributeName "Lastname" -Value "Doe" -AttributeName "EmployeeID" -Value "9876"

我不确定如何开始。我一直在阅读PowerShell splatting,但我不确定这是否是正确的方法。

任何可以推动我朝着正确方向前进的人,或者有一个如何实现这个目标的例子?

THX!

1 个答案:

答案 0 :(得分:0)

使用parameter alias 像这样:

Function Write-Something {
Param(
[Alias("Text","Word","SomeText")]
[String]$Message
)

    Write-Host $Message

}

Write-Something -Word "a"
Write-Something -SomeText "B"