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!
答案 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"