thomas91
Goto Top

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?.

 

# 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

Content-ID: 270005

Url: https://administrator.de/contentid/270005

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

114757
114757 23.04.2015 aktualisiert um 10:25:03 Uhr
Goto Top
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.

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
Thomas91
Thomas91 23.04.2015 um 12:02:46 Uhr
Goto Top
hallo jodel32,

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?
Gibt es eine Möglichkeit alle Computerkonten in AD nach den Daten von XY zu durchsuchen und diese zu löschen?

Gruß Thomas
114757
114757 23.04.2015 aktualisiert um 12:07:37 Uhr
Goto Top
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 ...
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.
Thomas91
Thomas91 23.04.2015 um 14:17:51 Uhr
Goto Top
Zitat von @114757:

> 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 ...

# Eingabe des Usernamens
$global:Username = Read-Host "Bitte den Benutzernamen eingeben"  

# Variablen der Speicherorte
$global:Profile="\\srv01\Profile\$global:Username.V2"  
$global:User="\\srv01\User$\$global:Username"  
$global:TS_Profile="\\srv01\TS_Profile\$global:Username.V2"  
$global:xenapp01="\\xenapp01\c$\Users\$global:Username"  
$global:xenapp02="\\xenapp01\c$\Users\$global:Username"  

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"){  
switch($inp){
   A {"Alle Dateien werden gel├Âscht"  
		Remove-Item $global:User -force
		Remove-Item $global:Profile -force
		Remove-Item $global:TS_Profile -force
		Remove-Item $global:xenapp01 -force
		Remove-Item $global:xenapp02 -force
	 }
   C{
	 $global:Username = Read-Host "Bitte den Benutzernamen eingeben"  
	}
   P {"Profil wird gel├Âscht"  
		Remove-Item $global:Profile -force
     }
   T   {"TS_Profile wird gel├Âscht"  
		Remove-Item $global:TS_Profile -force
	 }
   U {"User Daten werden gel├Âscht"  
	 Remove-Item $global:User -force
     }
   X{"Profile auf SRVXA01 &02 werden gel├Âscht"  
		Remove-Item $global:xenapp01 -force
		Remove-Item $global:xenapp02 -force	
    } 
   Q {"Ende"}  
   default {"Ung├╝ltige Eingabe"}  
   }
}

Kleiner Tipp?

> 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 ...


Die Variablen benötige ich nur in der Schleife.

> 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.

Beispiel: User01 hat sich auf dem PC01 und PC03 angemeldet und dort wurde sein Profil unter C:\Users\User01 gespeichert.
Das Script soll dann schauen ob der User auf PC01-05 angemeldet hat und bei positiver Rückmeldung die Daten löschen.
114757
114757 23.04.2015 aktualisiert um 15:03:44 Uhr
Goto Top
Kleiner Tipp?
naja du musst die Varablen schon in der Schleife aktualisieren face-wink 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"}  
   }
}
p.s. Bitte sei mit Dollarzeichen innerhalb von doppelten Anführungszeichen vorsichtig, denn sie könnten als Variable interpretiert werden !
Thomas91
Thomas91 23.04.2015 um 16:05:58 Uhr
Goto Top
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:
$global:srvxa01="\\srvxa01\c$\Users\$global:Username"  
114757
114757 23.04.2015, aktualisiert am 24.04.2015 um 00:04:00 Uhr
Goto Top
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:

siehst du doch oben in meinem korrigierten Code:

$global:srvxa01='\\srvxa01\c$\Users\' + $global:Username  
oder
$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.
Thomas91
Thomas91 24.04.2015 um 09:46:25 Uhr
Goto Top
Hallo Jodel32,

wenn ich die von dir angebrachten Änderungen mache geht das script nicht mehr.
Ja ich schreib auch nur einmal im jahr ein script da ist es kein wunder das keine Basic da sind ;(

Gruß
114757
114757 24.04.2015 aktualisiert um 10:20:56 Uhr
Goto Top
Das liegt an deinen beschiss... Umlauten die du in den Code kopiert hast
Und geht nicht ist keine Fehlermeldung !!
Thomas91
Thomas91 24.04.2015 um 12:07:59 Uhr
Goto Top
Zitat von @114757:

Das liegt an deinen beschiss... Umlauten die du in den Code kopiert hast

Wurden entfernt.

Und geht nicht ist keine Fehlermeldung !!

Ich öffne das Script mit der Powershell, welche sich kurz öffnet, nichts ausgibt und sofort wieder schließt.