pixel0815
Goto Top

PS Ver. 5 und Method invocation failed because System.Management.Automation PSCustomObject does not contain a method named Where

Moin zusammen,

ich hab folgendes Skript gefunden, ich finde es ziemlich cool. https://pshirwin.wordpress.com/2016/10/05/add-members-to-group-a-differe ...
Alle benötigten Module hab ich auch, allerdings habe ich ein Problem mit diesem Teil des Codes.

#Get Group membership
$Header |
ForEach-Object{
   $Group = $_
   $addADGroupMembers.$Group = $xlsxADGroupMembers.Where{$_.$Group -eq '1'} | Select-Object -ExpandProperty 'UserID'  
   $delADGroupMembers.$Group = $xlsxADGroupMembers.Where{$_.$Group -ne '1'} | Select-Object -ExpandProperty 'UserID'  
}

Der Import der Excel Datei funktioniert, Variable $Header ist auch gefüllt mit den Gruppen.
Soweit so gut. Wenn es zum Bereich #Get Group Membership läuft erhalte ich folgende Meldung

Method invocation failed because [System.Management.Automation.PSCustomObject] does not contain a method named 'Where'.  
At C:\AddGroupMemberExcel.ps1:38 char:4
+    $addADGroupMembers.$Group = ($xlsxADGroupMembers).Where{$_.$Group  ...
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Where:String) , RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Auch der Befehl einzeln $xlsxADGroupMembers.Where{$_.$Group -eq '1'} | Select-Object -ExpandProperty 'UserID' funktioniert nicht.
Dieses .Where ist nicht vorhanden.
Ich habe schon meine PS auf Verson 5.1 aktualisiert. Es läuft trotzdem nicht.

Was kann das sein?

<#

Author: I. Strachan
Version:
Version History:

Purpose: Add group member from excel worksheet. Scripts is based on Mike Robin's work  
         http://tinyurl.com/jfmw4o7 
#>
[CmdletBinding()]
param(
   $xlsxFile = 'Test.xlsx',  
   
   $WorkSheet = 'Test'  
)

#region
$exportDate = Get-Date -Format ddMMyyyy
#endregion

#Import Worksheet Using D. Finke's ImportExcel module http://tinyurl.com/lbhkhbd  
$xlsxADGroupMembers = Import-Excel "C:\$xlsxFile" -WorkSheetname $WorkSheet  

#Select Group names from Object
$Header = $xlsxADGroupMembers |
   Get-Member -MemberType NoteProperty | 
   Where-Object{$_.Name -ne  'UserID'} |   
   Select-Object -ExpandProperty Name

#Create empty hashtables
$addADGroupMembers = @{}
$delADGroupMembers = @{}

#Get Group membership
$Header |
ForEach-Object{
   $Group = $_
   $addADGroupMembers.$Group = $xlsxADGroupMembers.Where{$_.$Group -eq '1'} | Select-Object -ExpandProperty 'UserID'  
   $delADGroupMembers.$Group = $xlsxADGroupMembers.Where{$_.$Group -ne '1'} | Select-Object -ExpandProperty 'UserID'  
}

#region Main. Add and remove users to/from groups
$Header |
ForEach-Object{
   if($addADGroupMembers.$_){
      try{
         Add-ADGroupMember -Identity $_ -Members $addADGroupMembers.$_
      }
      catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]{
         Write-Warning "AD Object $($Error.CategoryInfo.TargetName) not found"  
      }
   }

   if($delADGroupMembers.$_){
      try{
         Remove-ADGroupMember -Identity $_ -Members $delADGroupMembers.$_ -Confirm:$false
      }
      catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]{
         Write-Warning "AD Object $($Error.CategoryInfo.TargetName) not found"  
      }
   }
}
#endregion

#region Export for futher processing
$GroupMembers =@{
  Groups  = $Header | Get-ADGroup -Properties WhenCreated
  Added   = $addADGroupMembers
  Revoked = $delADGroupMembers
}

$GroupMembers | 
Export-Clixml "C:\ADGroupMembers-$exportDate.xml" -Encoding UTF8  
#endregion

Content-Key: 365905

Url: https://administrator.de/contentid/365905

Printed on: May 3, 2024 at 13:05 o'clock

Mitglied: 135333
Solution 135333 Feb 23, 2018 updated at 13:02:51 (UTC)
Goto Top
Schreib diese Zeilen 5 und 6 des Schnippsels so
   $addADGroupMembers.$Group = $xlsxADGroupMembers |  ?{$_.$Group -eq '1'} | Select-Object -ExpandProperty 'UserID'   
   $delADGroupMembers.$Group = $xlsxADGroupMembers | ?{$_.$Group -ne '1'} | Select-Object -ExpandProperty 'UserID'   
Den Rest nicht angesehen, and no support ...

Gruß Snap
Member: pixel0815
pixel0815 Feb 23, 2018 at 13:03:02 (UTC)
Goto Top
Jup das läuft.Danke!

   $addADGroupMembers.$Group = $xlsxADGroupMembers | Where-Object {$_.$Group -eq '1'} | Select-Object -ExpandProperty 'UserID'  
   $delADGroupMembers.$Group = $xlsxADGroupMembers | Where-Object {$_.$Group -ne '1'} | Select-Object -ExpandProperty 'UserID'  

funktioniert auch. ich find s halt komisch das es mit dem .Where nicht funktioniert face-sad
Mitglied: 135333
135333 Feb 23, 2018 updated at 13:05:20 (UTC)
Goto Top
Ist bestimmt ein Fehler des externen Moduls, denn normalerweise haben Custom objects die Methode nicht.
Das was ich dir geschrieben habe macht aber exakt das Gleiche.