Benutzer mit den meisten Antworten
PS Skript local admin group

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" } }
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/
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 13. Dezember 2020 10:39
-
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''
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 13. Dezember 2020 10:39
Alle Antworten
-
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 }
-
Pack den 2. Foreach in die Schleife des 1. Foreach sonst hast du nur den letzten Eintrag.
PS: Statt Write-Host nimm besser Write-Output, dann kannst du das später auch mal in eine Datei ausgeben.
Mittels der Powershell ISE kannst du auch debuggen.- Bearbeitet Der Suchende Donnerstag, 3. Dezember 2020 15:06
-
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
- Zusammengeführt Denniver ReiningMVP, Moderator Samstag, 5. Dezember 2020 12:47 Gleiches Thema
-
Get-LocalGroupMember gibt ein Array von Objekten mit Eigenschaften:
https://www.google.com/search?client=firefox-b-d&q=Get-LocalGroupMemberforeach($member in $list) { if ($users.Contains($member.Name) ) {
}
}sollte klappen.
https://devblogs.microsoft.com/scripting/powertip-does-powershell-array-contain-a-value/
- Bearbeitet Der Suchende Freitag, 4. Dezember 2020 07:54
-
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
-
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 } }
-
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/
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 13. Dezember 2020 10:39
-
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''
- Als Antwort markiert Denniver ReiningMVP, Moderator Sonntag, 13. Dezember 2020 10:39
-
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.