我正在尝试使用Invoke-Expression将对象和字符串变量传递给“Get-ADUser”命令行开关。
凭据的构建方式如下:
$secpasswd = ConvertTo-SecureString $pwd -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($uid, $secpasswd)
然后一个字符串由其他参数组成:
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'}
但如果我点击确定
,则会显示凭据对话框并出现错误Get-ADUser:无法验证参数'Credential'的参数。参数为null或空。提供非null或空的参数,然后再次尝试该命令。 在行:1字符:54 + Get-ADUser -server srv-v-hh001.bwg.corp -Credential System.Management.Automatio ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidData :( :) [Get-ADUser],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser
我认为这是因为iex将$ mycreds解析为字符串,有没有办法告诉Powershell这是一个对象?
答案 0 :(得分: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
参数名称中有拼写错误。