Powershell Script zum löschen von Userprofilen
Moinmoin,
ich versuche mich gerade mal wieder am scripten mit Powershell.
Meine Vorstellung waren:
Nach Ausführen des Scriptes wird man gefragt wie der Username ist. Danach soll mit Eingabe eines Buchstaben etwas gelöscht werden.
Was momentan nicht Funktioniert ist C. Hier wird nicht der wert auserhalt der Schleife geändert. Außerdem funktioniert das lsöchen bei den XA-Servern nicht hier kommt ein Fehler das keine berechtigung vorhanden wäre und der Zugriff verweigert wrid. Gibt es auch noch eine Möglichkeit auf allen Computern das Userprofil zu suchen und zu löschen?.
Danke für eure Hilfe.
Gruß Thomas
ich versuche mich gerade mal wieder am scripten mit Powershell.
Meine Vorstellung waren:
Nach Ausführen des Scriptes wird man gefragt wie der Username ist. Danach soll mit Eingabe eines Buchstaben etwas gelöscht werden.
Was momentan nicht Funktioniert ist C. Hier wird nicht der wert auserhalt der Schleife geändert. Außerdem funktioniert das lsöchen bei den XA-Servern nicht hier kommt ein Fehler das keine berechtigung vorhanden wäre und der Zugriff verweigert wrid. Gibt es auch noch eine Möglichkeit auf allen Computern das Userprofil zu suchen und zu löschen?.
# Eingabe des Usernamens
$Username = Read-Host "Bitte den Benutzernamen eingeben"
while(($inp = Read-Host -Prompt "W├ñhlen Sie einen Befehl`nA = Alle Daten werden gel├Âscht ( P,T,U & X).`nC = Username aendern.`nP = Das Profil unter \\srvfl01\Profile\Username.V2 wird gel├Âscht.`nT = Das TS_Profil wird gel├Âscht.`nU = Userdaten unter \\srvfl01\User$\ werden gel├Âscht.`nX = Profile auf xenapp01 und xenapp02 werden gel├Âscht.`nQ = Ende`n") -ne "Q"){
switch($inp){
A {"Alle Dateien werden gel├Âscht"
Remove-Item $User -force
Remove-Item $Profile -force
Remove-Item $TS_Profile -force
Remove-Item $xenapp01 -force
Remove-Item $xenapp02 -force
}
C{
$Username = Read-Host "Bitte den Benutzernamen eingeben"
}
P {"Profil wird gel├Âscht"
Remove-Item $Profile -force
}
T {"TS_Profile wird gel├Âscht"
Remove-Item $TS_Profile -force
}
U {"User Daten werden gel├Âscht"
Remove-Item $User -force
}
X{"Profile auf xenapp01 &02 werden gel├Âscht"
Remove-Item $xenapp01 -force
Remove-Item $xenapp02 -force
}
Q {"Ende"}
default {"Ung├╝ltige Eingabe"}
}
}
Danke für eure Hilfe.
Gruß Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 270005
Url: https://administrator.de/contentid/270005
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
10 Kommentare
Neuester Kommentar
Moin,
zur Gültigkeit von Variablen in Scripten,Funktionen und Scriptblöcken lese bitte erst mal die Grundlagen (erstes Kapitel Powershell)
about_Scopes
Dann weist du auch warum du die Variable außerhalb des Scriptblocks im Switch-Teil nicht veränderst, weil es eben ein separater Scope ist, indem deine Variable $username eine separate Variable ist.
Benutze z.B stattdessen einen Variablennamen wie $global:username um diese aus allen Teilen deines Scriptes verfügbar/beschreibbar zu machen.
Das mit dem Profil-Löschen klappt nur wenn es mit einem Account gemacht wird der entsprechend genügend Rechte hat und der User dem das Profil gehört hat sich noch nicht angemeldet hat, denn dann hält Windows noch Bestandteile des Profils im RAM. Von den Registry-Einträgen ganz zu schweigen.
Bei XenApp kann ich dir leider nicht weiterhelfen, da habe ich keine Erfahrung mit.
Gruß jodel32
zur Gültigkeit von Variablen in Scripten,Funktionen und Scriptblöcken lese bitte erst mal die Grundlagen (erstes Kapitel Powershell)
about_Scopes
Dann weist du auch warum du die Variable außerhalb des Scriptblocks im Switch-Teil nicht veränderst, weil es eben ein separater Scope ist, indem deine Variable $username eine separate Variable ist.
Benutze z.B stattdessen einen Variablennamen wie $global:username um diese aus allen Teilen deines Scriptes verfügbar/beschreibbar zu machen.
The following are the basic rules of scope:
- An item you include in a scope is visible in the scope in which it
was created and in any child scope, unless you explicitly make it
private. You can place variables, aliases, functions, or Windows
PowerShell drives in one or more scopes.
- An item that you created within a scope can be changed only in the
scope in which it was created, unless you explicitly specify a
different scope.
Das mit dem Profil-Löschen klappt nur wenn es mit einem Account gemacht wird der entsprechend genügend Rechte hat und der User dem das Profil gehört hat sich noch nicht angemeldet hat, denn dann hält Windows noch Bestandteile des Profils im RAM. Von den Registry-Einträgen ganz zu schweigen.
Bei XenApp kann ich dir leider nicht weiterhelfen, da habe ich keine Erfahrung mit.
Gruß jodel32
Zitat von @Thomas91:
wenn ich die Eingabe de Usernamens, sowie die Variablen auf global: stelle funktioniert das ändern des Usernamens immer noch
nicht.
Dann hast du es falsch umgesetzt ...wenn ich die Eingabe de Usernamens, sowie die Variablen auf global: stelle funktioniert das ändern des Usernamens immer noch
nicht.
Wie wäre es wenn ich die Eingabe, sow eide Variablen zwischen While und swtich stelle?
Du musst ja wissen wo du diese benötigst, kann ich ja nicht wissen ...Gibt es eine Möglichkeit alle Computerkonten in AD nach den Daten von XY zu durchsuchen und diese zu löschen?
Wie meinen ? Welche Daten oder Eigenschaften ? Alles ist möglich wenn man es hier richtig erklärt.Kleiner Tipp?
naja du musst die Varablen schon in der Schleife aktualisieren sonst bleibt der Wert ja gleich, wenn man sie nur einmalig definiert ....# Eingabe des Usernamens
$global:Username = Read-Host "Bitte den Benutzernamen eingeben"
while(($inp = Read-Host -Prompt "W├ñhlen Sie einen Befehl`nA = Alle Daten werden gel├Âscht ( P,T,U & X).`nC = Username aendern.`nP = Das Profil unter \\srv01\Profile\Username.V2 wird gel├Âscht.`nT = Das TS_Profil wird gel├Âscht.`nU = Userdaten unter \\srv01\User$\ werden gel├Âscht.`nX = Profile auf xenapp01 und xenapp02 werden gel├Âscht.`nQ = Ende`n") -ne "Q"){
# Variablen der Speicherorte
$Profile="\\srv01\Profile\$($global:Username).V2"
$User='\\srv01\User$\' + $global:Username
$TS_Profile="\\srv01\TS_Profile\$($global:Username).V2"
$xenapp01='\\xenapp01\c$\Users\' + $global:Username
$xenapp02='\\xenapp01\c$\Users\' + $global:Username
switch($inp){
A {"Alle Dateien werden gel├Âscht"
Remove-Item $User -force
Remove-Item $Profile -force
Remove-Item $TS_Profile -force
Remove-Item $xenapp01 -force
Remove-Item $xenapp02 -force
}
C{
$global:Username = Read-Host "Bitte den Benutzernamen eingeben"
}
P {"Profil wird gel├Âscht"
Remove-Item $Profile -force
}
T {"TS_Profile wird gel├Âscht"
Remove-Item $TS_Profile -force
}
U {"User Daten werden gel├Âscht"
Remove-Item $User -force
}
X{"Profile auf SRVXA01 &02 werden gel├Âscht"
Remove-Item $xenapp01 -force
Remove-Item $xenapp02 -force
}
Q {"Ende"}
default {"Ung├╝ltige Eingabe"}
}
}
Zitat von @Thomas91:
hey,
> p.s. Bitte sei mit Dollarzeichen innerhalb von doppelten Anführungszeichen vorsichtig, denn sie könnten als
Variable
> interpretiert werden !
Wie soll ich dann zum Beispiel diese Zeile ändern:
hey,
> p.s. Bitte sei mit Dollarzeichen innerhalb von doppelten Anführungszeichen vorsichtig, denn sie könnten als
Variable
> interpretiert werden !
Wie soll ich dann zum Beispiel diese Zeile ändern:
siehst du doch oben in meinem korrigierten Code:
$global:srvxa01='\\srvxa01\c$\Users\' + $global:Username
$global:srvxa01="\\srvxa01\c`$\Users\$($global:Username)"
Innerhalb von einfachen Hochkommas findet keine Variablen-Expansion statt.
Alternativ kann man mit Backticks Sonderzeichen maskieren, aber nur innerhalb von doppelten Anführungszeichen. Das sind Powershell-Grundlagen die du unbedingt mal nachlesen solltest.
Das liegt an deinen beschiss... Umlauten die du in den Code kopiert hast
Und geht nicht ist keine Fehlermeldung !!
Und geht nicht ist keine Fehlermeldung !!