Suche Script - Local Admin Passwort der Clients ändern

RAMSoße

Lt. Commander
Registriert
März 2018
Beiträge
1.601
Moin Zusammen

Ich suche ein Powershell Script, mit dem ich auf mehreren Clients die Admin Passwörter ändern kann. Wenn jeder Client das selbe Passwort bekommen würde, wäre das denke ich mit folgendem möglich:

Code:
$computer = "C:\users\Ordner\hosts.txt"
foreach($computerName in $computer) {
    $adminPassword = "Password here"
    $adminUser = [ADSI]
    "WinNT://$computerName/Administrator"
    $adminUser.SetPassword($adminPassword)
}

Ich möchte aber jedem Client ein individuelles Passwort verpassen. Diese habe ich schon, also das Scrip braucht keine generieren, ich möchte es nur füttern.

Wäre dankbar über Tipps. Bin leider kein Powershell Experte.

Das ließt sich vielversprechender, aber eben nur mit einem Passwort:

Code:
foreach ($Computer in $Computers) {
   $Computer    =    $Computer.toupper()
   $Isonline    =    "OFFLINE"
   $Status        =    "SUCCESS"
    Write-Verbose "Working on $Computer"
if((Test-Connection -ComputerName $Computer -count 1 -ErrorAction 0)) {
   $Isonline = "ONLINE"
   Write-Verbose "`t$Computer is Online"
} else { Write-Verbose "`t$Computer is OFFLINE" }
try {
   $account = [ADSI]("WinNT://$Computer/Administrator,user")
   $account.psbase.invoke("setpassword",$pwd1_text)
   Write-Verbose "`tPassword Change completed successfully"
}
catch {
  $status = "FAILED"
  Write-Verbose "`tFailed to Change the administrator password. Error: $_"
}
$obj = New-Object -TypeName PSObject -Property @{
  ComputerName = $Computer
  IsOnline = $Isonline
  PasswordChangeStatus = $Status
}
$obj | Select ComputerName, IsOnline, PasswordChangeStatus
if($Status -eq "FAILED" -or $Isonline -eq "OFFLINE") {
   $stream.writeline("$Computer `t $isonline `t $status")
}
}
 
Ginge sicher (geht zumindest via Intune, dann wird es auch mit Powershell klappen), kannst aber auch direkt LAPS nutzen und die lokalen Admin-PWs vom DC verwalten lassen. Hat zwar etwas Komfortnachteile im Alltag, aber jeder Client bekommt ein individuelles Passwort für seinen lokalen Admin. Dazu wird es auch automatisch erneuert alle X Tage.
 
  • Gefällt mir
Reaktionen: DEADBEEF, Hannibal Smith, bla_oO und 3 andere
das hab ich tatsächlich schon gefunden und ins Auge gefasst.
@Shio Kannst du mir sagen ob es diese spezielle Funktion gibt, die ich mir wünsche? oder muss ich dennoch alle Clients einzeln durchgehen?

@thealex
Klingt super. Kann ich die Passwörter auch auslesen um sie z.B. in eine Datenbank zu pflegen, falls man mal manuell ran muss?
 
RAMSoße schrieb:
Klingt super. Kann ich die Passwörter auch auslesen um sie z.B. in eine Datenbank zu pflegen, falls man mal manuell ran muss?
Ja, es gibt eine rudimentäre GUI, mit der berechtigte User das Passwort unter Angabe des Rechnernamens auslesen können. Das Tool kann theoretisch jeder nutzen, aber unberechtige User bekommen einfach einen leeren Wert zurück.

Du kannst also dich + einen Kollegen der IT von mir aus berechtigen, die Kennwörter auszulesen. Ich würde mir nicht die Mühe machen, diese noch einmal parallel zu pflegen. Das führt das System ja etwas ad absurdum.
 
RAMSoße schrieb:
@Shio Kannst du mir sagen ob es diese spezielle Funktion gibt, die ich mir wünsche? oder muss ich dennoch alle Clients einzeln durchgehen?

Du musst das jetzt im Nachhinein auf deinen vorhandenen Clients natürlich deployen damit das funktioniert.
Sollte aber per GPO recht einfach gehen.

LAPS hat halt den Vorteil das es alles automatisch geht, da brauchste hinterher nichts mehr anfassen.
 
Shio schrieb:
LAPS hat halt den Vorteil das es alles automatisch geht, da brauchste hinterher nichts mehr anfassen.
Plus es gibt die Möglichkeit des Audits, d.h. durch bestimmte EventIDs wird protokolliert, wer wann auf welches LAPS Passwort zugegriffen hat.
 
Ich hake hier nochmal ein. Mit folgenden Befehl kann ich überprüfen ob die Hosts gerade online sind:

Code:
Test-Connection -ComputerName

Host1,
Host2,
Host3

-Count 1

Gibt es Sytax um mir bei dieser Abfrage nur die Host anzeigen zu lassen, die auch wirklich online sind? die liste ist in Wirklichkeit viiel länger :D
 
RAMSoße schrieb:
Gibt es Sytax um mir bei dieser Abfrage nur die Host anzeigen zu lassen, die auch wirklich online sind? die liste ist in Wirklichkeit viiel länger
Die passende Abfrage steht doch in deinem zuvor geposteten Skript.
 
@Evil E-Lex naja fast. ich kann es halt nicht lesen

Code:
$Rechners = @('Host1' 'Host2')

foreach ($Rechner in $Rechners) {


if(Test-Connection -ComputerName $Rechner -count 1 -ErrorAction 0) {
   $online = "ONLINE"
   Write-Host "`t$Rechner is Online"
} else {  }}

# Write-Host "`t$Rechner is OFFLINE"

hier aber das funktionierende Ergebnis
# ist zum einfügen bei Else. falls man die Offline Hosts auch angezeigt bekommen möchte
 
Du kannst den Else-Block komplett weglassen, wenn du den nicht brauchst. Hast du außerdem viele Hosts, würde ich die aus einer Datei lesen lassen, statt die direkt im Array anzugeben.
 
@Evil E-Lex
Danke aber den habe ich drin gelassen, da je nach bedarf, er mir anzeigt, welcher offline ist. Siehe auch #
Es sind max um die 40.
 
Zurück
Oben