命令 Get-ADUser -Filter 在 PSSession 中不起作用
Command Get-ADUser -Filter doesn't work in PSSession
我正在编写用于使用 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
错误: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
+ PS计算机名称: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
}
终于找到了解决您的问题的方法。
在您的代码中, 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
请注意,在当前解决方案中:
- 我的 $var 对象包含一个 Get-ADUser 对象的实例。这就是我在搜索
中使用$var.Name的原因
- Get-ADUser 和您一样使用过滤器,但这个过滤器是根据之前的选择构建的字符串
我正在编写用于使用 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
错误: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 + PS计算机名称: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
}
终于找到了解决您的问题的方法。
在您的代码中, 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
请注意,在当前解决方案中:
- 我的 $var 对象包含一个 Get-ADUser 对象的实例。这就是我在搜索 中使用$var.Name的原因
- Get-ADUser 和您一样使用过滤器,但这个过滤器是根据之前的选择构建的字符串