命令Get-ADUser -Filter在PSSession中不起作用

时间:2017-10-16 08:07:41

标签: powershell active-directory powershell-remoting

我正在使用GUI更改用户帐户AD的脚本。 在列表中选择用户时,我想显示他所属的所有组。 对于顺序,它是正常的,但在PSSession中命令不起作用,-Filter参数无法识别变量

$SessionAD = New-PSSession -ComputerName $AD
Invoke-Command $SessionAD -Command {Import-Module ActiveDirectory}
Import-PSSession $SessionAD -Module ActiveDirectory

...

$var = $ListeUsers.SelectedItem
$GroupsMember = Get-ADUser -Filter {Name -like $var} -Property MemberOf |
                Select -ExpandProperty MemberOf |
                Get-ADGroup -Property MemberOf |
                Select Name
Error : La variable : « var » trouvée dans l’expression : $var n’est pas définie.
    + CategoryInfo          : InvalidArgument : (:) [Get-ADUser], ArgumentException
    + FullyQualifiedErrorId : La variable : « var » trouvée dans l’expression : $var n’est pas définie.,Microsoft.ActiveDirectory.Management.Commands.GetADUser
    + PSComputerName        : AD-01

使用下面的代码,命令运行正常,但我无法检索变量$GroupsMember的值:

Invoke-Command -Session $SessionAD -ArgumentList $var,$GroupsMember -ScriptBlock {
    Param($var, $GroupsMember)
    $GroupsMember = Get-ADUser -Filter {Name -like $var} -Property MemberOf |
                    Select -ExpandProperty MemberOf |
                    Get-ADGroup -Property MemberOf |
                    Select Name
}

1 个答案:

答案 0 :(得分:1)

终于找到了解决问题的方法。 在您的代码中,Get-ADuser -Filter{...}中的大括号是问题所在。

您可以更新代码:

$SessionAD = New-PSSession -ComputerName "SVADDS01.Mylab.local"
Invoke-Command $SessionAD -Command {Import-Module ActiveDirectory}
Import-PSSession $SessionAD -Module ActiveDirectory | Out-Null

$ADUSers = Get-ADuser -Filter *
$var = $ADUSers | Select-Object -Property Name, SamaccountName | Out-GridView -OutputMode Single 

$GroupsMember = Get-ADUser -Filter ('Name -eq "' + $var.Name + '"') -Property MemberOf |
                Select -ExpandProperty MemberOf |
                Get-ADGroup -Property MemberOf |
                Select Name

$GroupsMember
Get-PSSession | Remove-PSSession

请注意,在当前的解决方案中:

  • My $ var对象包含Get-ADUser对象的实例。这就是我在搜索
  • 中使用$ var.Name的原因
  • Get-ADUser像你一样使用Filter,但是这个是从前一个选择构建的String