2016-04-14 13 views
1

Bir nesne ve bir dize değişkeni "Get-ADUser" komutuna Invoke-Expression kullanarak iletmeye çalışıyorum.Powershell Geçiş ifadesi için Nesne ve Dize Geçme

kimlik böyle inşa edilir:

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

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

ve son olarak aşağıdaki

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

yürütülür fakat onun getirdiği: bir dize ilave parametreleri ile oluşur

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

sonra

sadece

012'yi tıklatırsam kimlik iletişim kutusunu ve bir hatayı gidermek

Get-ADUser: 'Kimlik Bilgileri' parametresindeki bağımsız değişken doğrulanamıyor. Argüman boş veya boş. Boş olmayan veya boş olmayan bir argüman sağlayın ve ardından komutu tekrar deneyin. satırında : 1 karakter: 54 +-ADUser alın -sunucu srv-v-hh001.bwg.corp -credential System.Management.Automatio ... + ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo: InvalidData: (:) [Al-ADUser] ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.ActiveDirectory.Management.Commands.GetADUser

I Bunun nedeni, iex'in bir dizge olarak $ mycreds'ı ayrıştırmasıdır, Powershell'e bunun bir nesne olduğunu söylemenin bir yolu var mıdır?

+0

Parametrelerle 'Invoke-Expression 'kullanma örneği için bkz. Https://stackoverflow.com/questions/26615658/calling-invoke-expression-with-parameters-in-powershell. –

cevap

0

Neden IEX'a ihtiyacınız var? Sonra Get-ADUser ve sadece splat bunu parametrelerini oluşturmak için hashtable kullanın:

$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'} 

BTW, kendi SearchBase parametre adındaki bir yazım hatası var.

+0

Teşekkürler, bu yaptı! – Holger