Dukel 454 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Hallo zusammen, ich hänge aktuell an einem Problem: Ich benötige den Profilepfad ($env:USERPROFILE) von bestimmten Usern. - $env funktioniert nur mit den Credentials des entsprechenden Users - dir c:\users\ ist ungenau (mehrere Profile eines Users bei defekten) - Win32_Environment gib nur die System + Benutzervariablen aus (z.B. Temp) - Registy -> HKEY_USERS speichert wohl nur die aktuell angemeldeten User. Bekomme bei meinen Tests nur bei 2 Maschinen ein Ergebnis und auf beiden bin ich eingeloggt. Gibt es sonst noch ne Stelle wo ich das finde? Scriptsprache ist Powershell. Viele Grüße Zitieren Link zu diesem Kommentar
mamamia 13 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Hmm.. Ich kenne auch keine Möglichkeit, an die Umgebungsvariablen von nicht angemeldeten Benutzern zu kommen. - Registy -> HKEY_USERS speichert wohl nur die aktuell angemeldeten User. Bekomme bei meinen Tests nur bei 2 Maschinen ein Ergebnis und auf beiden bin ich eingeloggt. Der Schlüssel unter HKEY_USERS wird nach dem abmelden direkt mit abgemeldet und ist nicht mehr verfügbar. Darunter sieht man nur die aktuell angemeldeten User. - $env funktioniert nur mit den Credentials des entsprechenden Users Du könntest einen Export ins Anmeldeskript schreiben, falls es so etwas gibt. - dir c:\users\ ist ungenau (mehrere Profile eines Users bei defekten) Bei mehreren Ordner eines Users, kannst du die aktuellste ntuser.dat nehmen. Das ist dann der Pfad zum aktuellsten Profil. Falls die Ordnernamen nicht mit den Usernamen übereinstimmen, könntest du die ACL lesen, da steht der richtige User drin. Da ist jetzt nicht goldene Antwort mit bei, aber ich hoffe du kannst mit den Ansätzen was anfangen. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. August 2011 Autor Melden Teilen Geschrieben 11. August 2011 Ja mit den Ansätzen kann ich was anfangen. Leider ist das alles nicht so befriedigend. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Die auf dem System aktiven Profile stehen hier: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList Allerdings dürfte Dich das auch nicht weiterbringen, da dort die SID gespeicherrt wird. Wie wäre es, wenn Du schreibst, welche Ziele Du verfolgst ? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. August 2011 Autor Melden Teilen Geschrieben 11. August 2011 Doch genau das hat mich weitergebracht. Das Script läuft jetzt. Hatte vor einiger Zeit ein Script geschrieben welches Favoriten verteilt. Es gibt x Admins, y Server und z Webanwendungen (iLo Boards, Brocade Web IF, Netapp Web IF,...). Das Script hat für alle Admins alle direkt Zugänglichen Links auf alle Server verteilt in die jeweiligen Favoriten. Leider kam dann das Problem, dass durch defekte Profile die Zuordnung (ursprünglich den Usernamen) nicht mehr passte. Deswegen wollte ich den genauen Profilpfad auslesen. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. August 2011 Autor Melden Teilen Geschrieben 11. August 2011 Falls es jemand interessiert. Hier das Script: $hosts = "..\hosts_Server.txt" $users = ".\users.txt" $getsid = "c:\Program Files (x86)\SysinternalsSuite\Tools\psgetsid.exe" foreach($server in (get-content $hosts)){ "Bearbeiten von $server" | write-host -foregroundcolor blue foreach($user in (get-content $users)){ "Bearbeiten von $user" | write-host -foregroundcolor blue $sid = (& $getsid $user)[1] "$user hat die SID: $sid" | write-host -foregroundcolor blue $profilepath = Invoke-Command -ComputerName $server -Argumentlist $sid -ScriptBlock { param($sid); (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid").ProfileImagePath } if($profilepath){ $remoteprofilepath = ("\\$server\$profilepath").replace('C:','c$') "$user hat den Pfad $remoteprofilepath" | write-host -foregroundcolor blue foreach($fav in (get-childitem .\Favorites)){ remove-item "$remoteprofilepath\Favorites\$($fav.name)" -Recurse } copy-item .\Favorites\* "$remoteprofilepath\Favorites\" -Recurse if(Test-Path .\Favoriten_$server){ copy-item .\Favoriten_$server\* "$remoteprofilepath\Favorites\" -Recurse } } } } Zitieren Link zu diesem Kommentar
mamamia 13 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Hätte man nicht einfach den Pfad zu den (lokalen) Favoriten auf einen zentralen Share umlenken können? HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Favorites[/Code] Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Hi, vor dem Problem stand ich auch einmal und habe es genauso lösen müssen wie Du jetzt (hier ein paar Snippets): Zuerst die SID auflösen ($username als Parameter übergeben): function ConvertTo-SID($username) { $SID = new-object system.security.principal.NtAccount($UserName) $SID = $SID.translate([system.security.principal.securityidentifier]) $SID.value.ToString() } Invoke-Expression "Set-Variable -Name UserName -scope script -value $UserName" Dann prüfen, ob ein entsprechendes Profil des Benutzers auf dem aktuellen System vorhanden ist: Test-Path "Microsoft.PowerShell.Core\Registry::HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$UserSID" Danach kannst Du dann die Eigenschaften entsprechend prüfen: $UserProfilePath = (Get-ItemProperty -path "Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$UserSID" -name "ProfileImagePath").ProfileImagePath EDIT: Oh, ok. Da warst Du mit dem Posten schneller als ich mit dem Zusammensuchen der Snippets. :) EDIT 2: Und jetzt wo ich sehe, wozu Du es benötigst: Das Vorgehen von Dir ist nicht von MS supported. Klar, wird Dir egal sein, aber es ist wichtig zu wissen. ;) Viele Grüße olc Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. August 2011 Autor Melden Teilen Geschrieben 11. August 2011 Hätte man nicht einfach den Pfad zu den (lokalen) Favoriten auf einen zentralen Share umlenken können? HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Favorites[/Code] Nein. Wir bereiben zwar diverse Server / Storages / ESX Umgebungen aber mit der Zentralen IT (GPO's) können wir kaum etwas ändern lassen. Es geht auch nur um einen kleinen Teil der User, die diese Favoriten benötigen. Hi,EDIT: Oh, ok. Da warst Du mit dem Posten schneller als ich mit dem Zusammensuchen der Snippets. :) EDIT 2: Und jetzt wo ich sehe, wozu Du es benötigst: Das Vorgehen von Dir ist nicht von MS supported. Klar, wird Dir egal sein, aber es ist wichtig zu wissen. ;) Viele Grüße olc Wieso nicht supportet? Was wäre dann supportet? Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Oh, ok - mein Fehler. Du ersetzt ja gar nicht den Pfad in der Registrierung, sondern nutzt das nur als Variable, um Dich remote auf das System zu begeben, korrekt? $remoteprofilepath = ("\\$server\$profilepath").replace('C:','c$') Dann nehme ich alles zurück und behaupte das Gegenteil. ;) P.S.: Mit dem Snippet oben kannst Du Dir PsGetSID sparen. Du kommst mit .NET / PowerShell direkt an die SID ran. P.P.S.: Denk auch daran, daß wenn Ihr die GPOs nicht selbst unter Kontrolle habt, über die IE Maintenance meines Wissens auch Favoriten verteilt werden können. Nicht, daß Du mit den Einstellungen und dem Kopiervorgang Probleme verursachst. Viele Grüße olc Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. August 2011 Autor Melden Teilen Geschrieben 11. August 2011 Ja ich kopiere die Favoriten nach c$\... auf den jeweiligen Servern. p.s. ja werde ich einmal testen. Sieht schonmal gut aus. p.p.s. Sollte keine Probleme machen. Außerdem kopiere ich (und lösche) nur selbst angelegten Ordner. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Finde ich umständlich. Favoriten kann man per GPO (Internet Explorer Wartung) verteilen. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 11. August 2011 Autor Melden Teilen Geschrieben 11. August 2011 Wie schon geschrieben haben wir keinen Zugriff auf irgendwelche GPO's. Zitieren Link zu diesem Kommentar
iDiddi 27 Geschrieben 11. August 2011 Melden Teilen Geschrieben 11. August 2011 Außerdem finde ich's immer klasse, wenn Jemand seinen Code frei zur Verfügung stellt, auch wenn es hier um einen sehr speziellen Anwendungsbereich geht, der im Normalfall mit GPO's abgedeckt wird. Also herzlichen Dank an Dukel, olc und mamamia :) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.