我正在尝试创建一个可以更新给定属性的函数,其中属性的名称传递给函数,如下所示:
function Set-UserProperty {
param (
[String]$Property,
[String]$NewValue
)
Get-ADUser Testy.McGee -Properties $Property
Set-ADUser Testy.McGee -$Property $NewValue
# Set-ADUser Testy.McGee -Description $NewValue # <<<<< THIS WORKS
}
Set-UserProperty -Property "Description" -NewValue "New Description"
我可以很好地检索用户,但是当我尝试设置新的Description
时,我收到此错误:
Set-ADUser:找不到接受参数的位置参数 '-Description'。
我也试过调用Set-ADUser Testy.McGee $Property $NewValue
,但这只会导致:
Set-ADUser:找不到接受参数的位置参数 '说明'。
从第一个错误看,PowerShell
似乎正在尝试执行:
Set-ADUser "Testy.Mcgee" -Description "New Description"
,因为它抱怨'-Description'
参数。
但是,当我调用该确切行(Set-ADUser "Testy.Mcgee" -Description "New Description"
)时,用户将在AD中更新。
我是否正确地认为,因为我将参数作为[string]
传递,我不能再将其用作参数名称?如果是这样,是否有其他方法可以实现这一点(通过函数传递参数名称)?
答案 0 :(得分:1)
试试这个:
function Set-UserProperty {
param (
[String]$Property,
[String]$NewValue
)
Get-ADUser Testy.McGee -Properties $Property
$Command = "Set-ADUser Testy.McGee -$Property $NewValue"
Invoke-Expression $Command
# Set-ADUser Testy.McGee -Description $NewValue # <<<<< THIS WORKS
}