erikro
Goto Top

Unterschied PS 5 und PS 7

Moin,

ich habe ein Powershellskript, das bisher ohne Probleme lief. Als Parameter wird

param (   
    [string] $SourceGroup = $(Read-Host -prompt "Eingabe Quellgruppe"), # Wildcards are allowed.  
    [bool] $recursive = $false # Don't do it recursive by default. Recursive also shows inherited Memberships. 
)

beim Aufruf übergeben. Das soll ein Teil oder auch ein ganzer Gruppenname sein. Im weiteren Verlauf wird dann mit

$sg = $SourceGroup + "*"  
If (Get-ADGroup -Filter {SamAccountName -like $sg})

geprüft, ob es denn diese Gruppe(n) gibt.

Unter 5.1.19041.1682 Desktop läuft das wie Schmitz' Katze und das gesamte Skript erstellt eine Matrix aus Usern und Gruppenmitgliedschaften. Alles gut. Unter 7.2.5 Core passiert folgendes:

PS U:\ps1> .\gruppen_user_matrix.ps1 -SourceGroup DL_RW_ED -recursive $true
Get-ADGroup: Variable: 'sg' found in expression: $sg is not defined.  
WARNING: Sourcegroup DL_RW_ED* not found not in AD.
PS U:\ps1> .\gruppen_user_matrix.ps1 -SourceGroup DL_RW -recursive $true
Get-ADGroup: Variable: 'sg' found in expression: $sg is not defined.  
WARNING: Sourcegroup DL_RW* not found not in AD.
PS U:\ps1> .\gruppen_user_matrix.ps1 -SourceGroup DL_RW_EDV -recursive $true
Get-ADGroup: Variable: 'sg' found in expression: $sg is not defined.  
WARNING: Sourcegroup DL_RW_EDV* not found not in AD.

Warum? Was wurde da geändert? Und warum steht in der Fehlermeldung, dass "Sourcegroup DL_RW*" nicht gefunden wurde?

Beide PS-Installationen befinden sich auf dem selben Rechner und es wird das Skript mit dem selben User ausgeführt. Es kann also kein Rechteproblem sein.

Liebe Grüße

Erik

Content-Key: 3209579330

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

Ausgedruckt am: 19.03.2024 um 02:03 Uhr

Mitglied: colinardo
Lösung colinardo 29.06.2022 aktualisiert um 17:55:32 Uhr
Goto Top
Servus Erik,
kann das hier im Test zwischen 5.1 und 7.2.5 leider nicht nachvollziehen, aber schreibe den Filter stattdessen mal so
Get-ADGroup -Filter "SamAccountName -like '$sg'"  
damit umgehst du die Subexpression, die führt als Filter manchmal zu nicht nachvollziehbaren Scope-Problemen, bei denen der Parent Scope nicht im Filter lesbar ist.
Evt. auch mal das AD Module explizit vorladen (ohne Autoload).

Grüße Uwe
Mitglied: erikro
erikro 30.06.2022 um 09:55:03 Uhr
Goto Top
Moin,

ich danke Dir erstmal. Nun läuft das Skript fast sauber durch und macht auch unter 7 das, was es soll. Offensichtlich ist die Version 7 genauer (oder auch zickiger) als die 5er. Ich musste noch an zwei, drei anderen Stellen was ändern. Nun kommt es so weit, dass die Excel-Tabelle korrekt erstellt wird. Nur eins fehlt noch: Hübsch machen. Da kriege ich auf diese beiden Zeilen:

$listObject = $ws.ListObjects.Add([Microsoft.Office.Interop.Excel.XlListObjectSourceType]::xlSrcRange, $ws.UsedRange, $null,[Microsoft.Office.Interop.Excel.XlYesNoGuess]::xlYes,$null)
$listObject.TableStyle = "TableStyleMedium16"  

Diese Meldungen

InvalidOperation: U:\ps1\gruppen_user_matrix.ps1:158
Line |
 158 |  … Objects.Add([Microsoft.Office.Interop.Excel.XlListObjectSourceType]:: …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Unable to find type [Microsoft.Office.Interop.Excel.XlListObjectSourceType].

InvalidOperation: U:\ps1\gruppen_user_matrix.ps1:159
Line |
 159 |          $listObject.TableStyle = "TableStyleMedium16" # Style Cheat S …  
     |          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The property 'TableStyle' cannot be found on this object. Verify that the property exists and can be set.  

Hmmmmmmm, ehrlich gesagt bin ich nicht wirklich der Experte des Excel-Objekts. Ich habe nachgelesen bei MS in der Doku und verstehe das nicht wirklich. Offenbar ist die Zeile 158 falsch. Aber warum? Wieso funkt das unter 5 und nicht unter 7?

Liebe Grüße

Erik
Mitglied: colinardo
Lösung colinardo 30.06.2022 aktualisiert um 10:07:05 Uhr
Goto Top
Den Interop-Typ Microsoft.Office.Interop.Excel musst du erst mit Add-Type laden bevor du ihn nutzen kannst, der Namespace wird nicht automatisch geladen.
Alternativ statt den Namespace zu nutzen ist das __Value der Konstanten dort einzutragen dann brauchst du den Typ nicht laden.
Die PS7 verzeiht halt ein paar Ungenauigkeiten nicht mehr so wie die 5er.
Mitglied: erikro
erikro 30.06.2022 um 10:17:36 Uhr
Goto Top
Nochmal danke. Jetzt läuft es unter beiden Versionen. Tatsächlich war das Original ein wenig schmutzig programmiert. Offenbar stört das unter 5 nicht und unter 7 schon. Letzteres finde ich eigentlich besser. face-wink