2017-10-16 100 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