none
PS Skript local admin group RRS feed

  • Frage

  • Hi, 

    ich habe eine Liste mit Servern und eine Liste mit Usern (samaccountnames) und möchte nun ein Skript basteln, dass mir sagt, ob die User in der lokalen Administratorgruppe der Server sind. Wenn ja, dann soll mir das Skript ausgeben, dass beispielsweise der User x in der lokalen Admingruppe vom Server x und Server xy ist und wenn nicht, soll es mir ausgeben, dass der User in keiner der Gruppen ist. 

    Hier mein Ansatz, wie könnte ich weiter machen? Vorschläge? 

    $Computers= get-content Pfad der Liste mit Servernamen
    $users= get-content Pfad der Liste mit samaccountnames
    
    foreach ($computer in $computers) { 
        $list= Get-LocalGroupMember "Administrators" 
    
        if ($list -contains $users) {
        Write-Host "$user is a member of $list"
        }
        Else {
        Write-Hot "$user is not a member of $list" 
        }
    
    }

    Donnerstag, 3. Dezember 2020 11:24

Antworten

  • Also mal einen Schreibfehler zu korrigieren, solltest du schon können;-).

    1. Wenn du in einer Schleife eine Variable immer überschreibst, was denkst du wohl, was dann übrigbleibt?
    2. Es gibt zusätzlich das Variablen-Scoping. Die Variable, die nur in der Schleife angesprochen wird is danach nicht mehr aktiv.

    https://www.windowspro.de/script/gueltigkeitsbereich-scope-von-variablen-powershell

    Da ich die Umgebung nicht habe kann ich das Script nicht bauen.Bzgl. deines Problems, schau doch mal hier:

    https://4sysops.com/archives/the-new-local-user-and-group-cmdlets-in-powershell-5-1/

    Freitag, 4. Dezember 2020 07:59
  • ja, es gibt viele Lösungen, aber nicht wo zusätzlich zu einer Serverliste auch eine Userliste einbauen muss. Und das ist ja mein Problem - weil ich nicht weiß, wie ich die vergleichen kann
    Dann lass Dir doch erstmal die Liste der administrativen User der Server generieren und vergleich sie danach mit der Liste der User die Du prüfen möchtest. Dafür gibt es dann Compare-Object. Die Hilfe bitte komplett lesen - inclusive der Beispiele - und ein bissl damit spielen und dann klappt das schon. Und wenn Du stecken bleibst, kannst Du den angepassten Code hier posten und wir versuchen weiter Dir zu helfen. ;-) 

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 4. Dezember 2020 10:53

Alle Antworten

  • $list ist ein Array ebenso wie $users.
    Somit musst du per foreach durch $users gehen um zu prüfen ob dieser einzelne User i der Liste der Admins ist.
    Oder auch umgekehrt.
    Donnerstag, 3. Dezember 2020 11:33
  • Verstehe ...also theoretisch verstehe ich es 

    Wie baue ich das am besten in mein Skript ein? 

    Danke! 

    LG

    Donnerstag, 3. Dezember 2020 11:45
  • Was mach ich denn hier falsch :(( 

    $Computers= get-content Pad computerliste
    $users= get-content Pfad usernames
    
    foreach ($computer in $computers) { 
        $list= Get-LocalGroupMember "Administrators"
    
    }
    
    foreach ($user in users) {
    	If ($user -contains $list) 
    	Write-Host $user is admin of 
    
    	}
    
    	Else {
    	Write-Host $user is not admin
    
    }
    

    Donnerstag, 3. Dezember 2020 13:59
  • Pack den 2. Foreach in die Schleife des 1. Foreach sonst hast du nur den letzten Eintrag.
    Mittels der Powershell ISE kannst du auch debuggen.

    https://docs.microsoft.com/de-de/powershell/scripting/windows-powershell/ise/how-to-debug-scripts-in-windows-powershell-ise?view=powershell-7.1

    PS: Statt Write-Host nimm besser Write-Output, dann kannst du das später auch mal in eine Datei ausgeben.
    • Bearbeitet Der Suchende Donnerstag, 3. Dezember 2020 15:06
    Donnerstag, 3. Dezember 2020 15:04
  • Danke, aber ich kriegs einfach nicht hin ... 

    auch das funktioniert nicht .... 

    foreach ($computer in $computers) { 
        $list= Get-LocalGroupMember "Administrators"
    
    }
    Donnerstag, 3. Dezember 2020 19:15
  • Hi zusammen, 

    ich habe eine Liste mit Usernamen (samaccountnames) und eine Liste mit Hostnamen von Servern. Ich möchte mit einem Skript nun prüfen, ob die User meiner Liste lokale Administratoren auf den Servern meiner Liste sind - und das Ganze remote. 

    Ich denke, dass ich die User im Skript nicht richtig anspreche... könnte mir hiermit wer behilflich sein? Es will einfach nicht funktionieren ... wär super, wenn mir jemand den Fehler gleich direkt im Skript ausbessern könnte... sitze schon lange dabei

    $Computers= get-content Pfad der Liste mit den Hostnamen der 
                            Server
    
    $group= "Administrator"
    
    $membernames= get-content Pfad der Liste mit den Usernamen
    
    
    foreach ($computer in $computers) { 
        $ps= new-PSSession -ComputerName $computer 
    
        $getgroup= Invoke-Command -Session $ps -ArgumentList $group -ScriptBlock  {
            param ($group)
            net localgroup $group
            }
    
        if ($getgroup -like "*$membernames*"){ 
           Write-Output "$membername is admin of $computer"
        } 
            
        else { 
            Write-Output "$membername is no admin of $computer" 
        }
    

    Tausend DANK!

    LG Maxi

    Donnerstag, 3. Dezember 2020 19:53
  • Get-LocalGroupMember gibt ein Array  von Objekten mit Eigenschaften:
    https://www.google.com/search?client=firefox-b-d&q=Get-LocalGroupMember

    foreach($member in $list) { if ($users.Contains($member.Name) ) {
    }
    }

    sollte klappen.

    https://devblogs.microsoft.com/scripting/powertip-does-powershell-array-contain-a-value/


    Donnerstag, 3. Dezember 2020 23:00
  • Warum nochmal ne neue Frage? Das ist doch die gleiche Frage nochmal?

    Es will einfach nicht funktionieren

    ... ist keine valide Fehlerbeschreibung.  ;-)

    Wenn ich mich nicht irre, sollte die Gruppe entweder "Administratoren" oder "Administrators" heißen - nicht "Administrator", oder? ;-)

    "net.exe" ist kein Powershell cmdlet - liefert also keine Objekte sondern Text/Strings. 

    Du kannst eine Liste von Strings nicht mit -like mit einer anderen Liste von Strings vergleichen.

    Hast Du schon mal versucht, nach einer fertigen Lösung zu suchen? Sowas wurde - gefühlt - mindestens schon  1000 mal im Netz gefragt und beantwortet.

    Google :  Powershell find members of local groups remotely

    .... in den ersten 5 oder 6 Treffern sind genug Beispiele dabei, die Dir zeigen, wie man das machen kann.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Donnerstag, 3. Dezember 2020 23:06
    Donnerstag, 3. Dezember 2020 23:03
  • ja, es gibt viele Lösungen, aber nicht wo zusätzlich zu einer Serverliste auch eine Userliste einbauen muss. Und das ist ja mein Problem - weil ich nicht weiß, wie ich die vergleichen kann
    Freitag, 4. Dezember 2020 05:29
  • DANKE! 

    Fehler unexpected token - Klammer nach ($member.Name) = fett gedruckt 

    Wieso darf ich die so nicht setzen? Natürlich auch falsch wenn ich sie weggebe

    $Computers= get-content Pfad Computernamen
    $users= get-content Pfad Usernamen
    
    foreach ($computer in $computers) { 
        $list= Get-LocalGroupMember "Administrators" -computerName $computer
    }
    
    foreach($member in $list) 
    {
      if ($users.Contains($member.Name) {
      Write-Host $user is admin of $computer
      }
    
      else {
      Write-Host $user is admin of $computer
      }
    
    }
    


    Freitag, 4. Dezember 2020 07:12
  • Also mal einen Schreibfehler zu korrigieren, solltest du schon können;-).

    1. Wenn du in einer Schleife eine Variable immer überschreibst, was denkst du wohl, was dann übrigbleibt?
    2. Es gibt zusätzlich das Variablen-Scoping. Die Variable, die nur in der Schleife angesprochen wird is danach nicht mehr aktiv.

    https://www.windowspro.de/script/gueltigkeitsbereich-scope-von-variablen-powershell

    Da ich die Umgebung nicht habe kann ich das Script nicht bauen.Bzgl. deines Problems, schau doch mal hier:

    https://4sysops.com/archives/the-new-local-user-and-group-cmdlets-in-powershell-5-1/

    Freitag, 4. Dezember 2020 07:59
  • ja, es gibt viele Lösungen, aber nicht wo zusätzlich zu einer Serverliste auch eine Userliste einbauen muss. Und das ist ja mein Problem - weil ich nicht weiß, wie ich die vergleichen kann
    Dann lass Dir doch erstmal die Liste der administrativen User der Server generieren und vergleich sie danach mit der Liste der User die Du prüfen möchtest. Dafür gibt es dann Compare-Object. Die Hilfe bitte komplett lesen - inclusive der Beispiele - und ein bissl damit spielen und dann klappt das schon. Und wenn Du stecken bleibst, kannst Du den angepassten Code hier posten und wir versuchen weiter Dir zu helfen. ;-) 

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 4. Dezember 2020 10:53
  • Bleibe bitte in einem Thread!

    Blog: http://www.bytecookie.de

    Powershell Code Manager: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Samstag, 5. Dezember 2020 12:44
    Moderator