2016-08-15 74 views
0

我想創建可更新給定屬性在屬性的名稱被傳遞到函數像這樣一個功能:如何使用String作爲一個動態參數名稱

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 : A positional parameter cannot be found that accepts argument '-Description'.

我也打過電話Set-ADUser Testy.McGee $Property $NewValue,但這只是導致:

Set-ADUser : A positional parameter cannot be found that accepts argument 'Description'.

從第一個錯誤,它看起來好像是PowerShell試圖執行:

Set-ADUser "Testy.Mcgee" -Description "New Description",因爲它抱怨的'-Description'說法。

但是,當我稱之爲準確線(Set-ADUser "Testy.Mcgee" -Description "New Description")時,用戶在AD中更新。

我是否正確的想法,因爲我通過參數作爲[string]我不能再使用它作爲參數名?如果是這樣,是否有其他方法來實現這一點(通過函數傳遞參數名稱)?

回答

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 
} 
1

使用splatting

function Set-UserProperty { 
    param (
     [String]$Property, 
     [String]$NewValue 
    ) 

    $SetADUserParameters = @{ 
     $Property = $NewValue 
    } 

    Get-ADUser Testy.McGee -Properties $Property 
    Set-ADUser Testy.McGee @SetADUserParameters 
} 
相關問題