h41msh1c0r
Goto Top

Powershell User zur Admingruppe hinzufügen mag nicht beim 2ten Scriptlauf

Aloa in die Runde,

ich versuche gerade einige Nutzer in die lokale Administrator Gruppe einzufügen.
Das cmdlet add-localgroupmember ist leider nicht nutzbar.

Daher versuch ich den Weg über ADSI.

$server = $env:COMPUTERNAME
$localgroup = "Administrators"  
$group = [ADSI]"WinNT://$Server/$localgroup,group"  

$members = $group.psbase.Invoke("Members")  
$membersList = @()
$checknewUsers = @('name1','name2')  

$members | ForEach-Object {
    $membersList += "$($_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null))"  
}

#$membersList

foreach($user in $checknewUsers){
    if(($user -notmatch $membersList)){
        write-host "$user : Name nicht in memberlist"  
        $group.add("WinNT://<domain>/$user,user")  
    }
}

$members = $group.psbase.Invoke("Members")  
$members | ForEach-Object {
  $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)  
}

Wenn ich nun meinen mein Script ausführe macht er das auch ohne murren und fügt die fehlenden Nutzer in die lokale Administrator Gruppe ein.
Führe ich das Script allerdings ein 2tes mal aus, geht er allerdings trotzdem in den unten stehenden IF Teil.

    if(($user -notmatch $membersList)){
        write-host "$user : Name nicht in memberlist"  
        $group.add("WinNT://<domain>/$user,user")  
    }

Das wirft dann einen Fehler weil der Nutzer ja bereits in der Gruppe enthalten ist.

Warum geht er in den IF Zweig die Bedingung ist doch nicht erfüllt?

Mit "notcontains" läufts auch nicht.

Wenn einer einen anderen Weg hat wie ich die User reinbekomme in die Gruppe, bin ich immer offen für Verbesserung.

VG

Content-ID: 508311

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

emeriks
emeriks 25.10.2019 um 08:17:17 Uhr
Goto Top
Hi,
Zitat von @H41mSh1C0R:
Warum geht er in den IF Zweig die Bedingung ist doch nicht erfüllt?
Sicher? Hast Du Dir den Inhalt von $membersList im 2. Lauf mal anzeigen lassen?

E.
AndreasHoster
Lösung AndreasHoster 25.10.2019 um 09:40:17 Uhr
Goto Top
Das kann so auch nicht funktionieren.
-notmatch ist ein Vergleich mit Regular Expressions, ich sehe hier keine RegEx.

-notcontains ist das richtige:
$membersList -notcontains $user
Der Array, der durchsucht werden soll, ob er das Element enthält kommt VORNE hin.
Kann man sich sprachlich ganz einfach merken:
Array enthält nicht Element.
141575
Lösung 141575 25.10.2019 aktualisiert um 09:46:54 Uhr
Goto Top
Oder man nimmt -notin dann kann die Reihenfolge so wie sie jetzt ist bestehen bleiben.
$user -notin $membersList