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

Printed on: October 7, 2024 at 23:10 o'clock

emeriks
emeriks Oct 25, 2019 at 06:17:17 (UTC)
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
Solution AndreasHoster Oct 25, 2019 at 07:40:17 (UTC)
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
Solution 141575 Oct 25, 2019 updated at 07:46:54 (UTC)
Goto Top
Oder man nimmt -notin dann kann die Reihenfolge so wie sie jetzt ist bestehen bleiben.
$user -notin $membersList