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-ID: 365905

Url: https://administrator.de/forum/ps-ver-5-und-method-invocation-failed-because-system-management-automation-pscustomobject-does-not-contain-a-365905.html

Ausgedruckt am: 22.12.2024 um 12:12 Uhr

135333
Lösung 135333 23.02.2018 aktualisiert um 14:02:51 Uhr
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
pixel0815
pixel0815 23.02.2018 um 14:03:02 Uhr
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
135333
135333 23.02.2018 aktualisiert um 14:05:20 Uhr
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.