2017-10-16 93 views
1

我在做一个用GUI改变用户帐户AD的脚本。 在列表中选择一个用户时,我想显示他是其成员的所有组。 对于顺序是确定的,但在PSSession中的命令不工作,-Filter参数不识别变量命令Get-ADUser -Filter在PSSession中不起作用

$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 
} 
+0

喜建一个String,也许$ var不是在Import-PSSession之后加载的会话中创建的。你可以在$ var = $ ListeUsers.SelectedItem之后输入get-variable吗? –

+0

变量处于相同的pssession状态。 Get-Variable有这个错误: Get-Variable:Impossible de trouver une variablenommée«test05»。 AucaractèreLigne:1:8 + $ var | Get-Variable + ~~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(test05:String)[Get-Variable],ItemNotFoundException + FullyQualifiedErrorId:VariableNotFound,Microsoft.PowerShell.Commands.GetVariableCommand – Guillaume

回答

0

终于找到了解决您的问题的方法。 在你的代码中,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便有使用,像你这样的,一个过滤器的原因,但是这一次是从以前的选择
+0

Thank's's ,你的解决方案的工作原理,但我不想通过gridview,而是通过GUI中的用户列表“组合框”。包含选定用户的变量是$ var – Guillaume

+0

这不是问题。我使用OUt-gridview来做一些测试;但在你的情况下,你可以使用combobox.SelectedItem或combobox.selectedValue。告诉我你的代码,我将能够给你正确的过滤器语法。 –

+0

$ ADUsers = Get-ADUser -Filter“*”-SearchBase“OU = Users,DC = digital,DC = local”|选择名称,SamAccountName |排序对象名称 的foreach($用户在$ ADUsers) {$ ListUsers.Items.Add($ Users.Name) } $ BtnUpdate.add_click({$ = SelectedUser $ ListUsers.SelectedItem $ ADGroupsMember =获取-ADUser -Filter {Name -like $ SelectedUser} -Property MemberOf | Select -ExpandProperty MemberOf | Get-ADGroup -Property MemberOf |选择名称 Foreach($ ADGroupsMember中的$组) {$ ListADGroupsMember.Items.Add($ Groups。姓名)} }) – Guillaume