2016-04-14 10 views
1

Invoke-Expressionを使用してオブジェクトと文字列変数を "Get-ADUser"コマンドレットに渡そうとしています。Powershellオブジェクトと文字列を呼び出し式に渡す

資格情報は、次のように構築されています:

if ($dc) 
{ 
    $newVar = " -server $dc" 
} 

if ($ou) 
{ 
    $newVar = $newvar + " -Serchbase $ou" 
} 

、最終的には、以下が

$AllADUsers = iex "Get-ADUser $newVar -Credential $($mycreds) -Filter * -Properties *" | Where-Object {$_.info -NE 'Migrated'} 

実行されますが、それがもたらす:文字列は、追加のパラメータで構成されて

$secpasswd = ConvertTo-SecureString $pwd -AsPlainText -Force 
$mycreds = New-Object System.Management.Automation.PSCredential ($uid, $secpasswd) 

その後、

資格情報ダイアログを開き、OKをクリックするだけでエラーが発生する

Get-ADUser:パラメータ 'Credential'で引数を検証できません。引数がnullまたは空です。 nullまたは空でない引数を指定してから、コマンドを再試行してください。ラインで :1つの文字:54 +は、Get-ADUser SRV-V-hh001.bwg.corp -Credential System.Management.Automatio ... + ~~~~~~~~~~~~~~ -server ~~~~~~~~~~~~~ + CategoryInfo:InvalidData:(:) [取得-ADUser]、ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError、Microsoft.ActiveDirectory.Management.Commands.GetADUser

Iこれはiexが$ mycredsを文字列として解析しているためだと思いますが、これはPowershellにオブジェクトであることを伝える方法ですか?

+0

パラメータとともに「Invoke-Expression」を使用する例については、https://stackoverflow.com/questions/26615658/calling-invoke-expression-with-parameters-in-powershellを参照してください。 –

答えて

0

なぜIEXが必要なのですか? Get-ADUserのパラメータを構築するためにハッシュテーブルを使用して、ちょうどsplatそれ:

$secpasswd = ConvertTo-SecureString $pwd -AsPlainText -Force 
$mycreds = New-Object System.Management.Automation.PSCredential ($uid, $secpasswd) 

$Splat = @{ 
    Credential = $mycreds 
    Filter = '*' 
    Properties = '*' 
} 

if ($dc) 
{ 
    $Splat.Server = $dc 
} 

if ($ou) 
{ 
    $Splat.SearchBase = $ou 
} 

$AllADUsers = Get-ADUser @Splat | Where-Object {$_.info -NE 'Migrated'} 

ところで、あなたはあなたのSearchBaseパラメータ名のタイプミスを持っています。

+0

ありがとうございました! – Holger

関連する問題