how-to-accurately-enumerate-windows-user-profiles-with-powershell.jpg

Alle Windows gebruikersprofielen opvragen met PowerShell

Alle Windows gebruikersprofielen opvragen met PowerShell

 

how-to-accurately-enumerate-windows-user-profiles-with-powershell.jpg

Wanneer u alle profielen probeert weer te geven, hebt u een script nodig dat rekening kan houden met verschillende scenario's.

Een dagelijkse taak die veel beheerders moeten uitvoeren bij het werken met zowel Windows server als Windows client besturingssystemen, is het weergeven van alle user profiles. Het profiel van een gebruiker is de gebruikelijke plek waar elke geïnstalleerde applicatie, evenals Windows zelf, bestanden en mappen plaatst die specifiek zijn voor een bepaalde gebruiker. Als een beheerder afzonderlijke bestanden voor alle gebruikers via een script moet verwijderen, toevoegen of wijzigen, is de gebruikelijke reactie om alle mappen in C:\Users op te sommen. Aangezien C:\Users voor de meeste gebruikers de maplocatie is, volstaat het om elk van deze mappen eenvoudig te identificeren. Maar wat als we alle gebruikersprofielen moeten hebben , inclusief die van SYSTEM, Network Service en andere besturingssysteemspecifieke profielen? Of wat gebeurt er als we met Windows XP werken en de gebruikersprofielen in plaats daarvan worden opgeslagen in C:\Documents and Settings ? We hebben een script nodig dat al deze user profile scenario's kan meenemen.

 

Om een robuuster script te maken om gebruikersprofielen weer te geven, kunnen we niet eenvoudig alle mappen in C:\Users weergeven. We moeten een locatie opvragen die altijd naar alle gebruikersprofielen op een systeem verwijst, en daarvoor moeten we naar het register gaan.

Lees ook: Werken met Windows-services in PowerShell

Het register bevat de sleutel ProfileList in HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion. Deze registersleutel bevat één subsleutel voor elk user profile op een Windows-computer. In elk van deze subsleutels bevindt zich een registerwaarde met de naam ProfileImagePath die het profielpad voor alle gebruikers bevat.

Zodra we deze locatie kennen, is het een kwestie van uitzoeken hoe we PowerShell al deze waarden kunnen laten opsommen. Aangezien PowerShell al een registerprovider heeft ingebouwd, kunnen we Get-ChildItem gebruiken om al deze subsleutels op te sommen. Je kunt hieronder zien dat ik naast de standaard systeemprofielen slechts één Adam gebruiker op mijn systeem heb.

PS> Get-ChildItem 'HKLM: \\ Software \\ Microsoft \\ Windows NT \\ CurrentVersion \\ ProfileList'


    Hive: HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows NT \\ CurrentVersion \\ ProfileList


Name                           Property
                           ---- --------
S-1-5-18                       Flags            : 12
                               ProfileImagePath: C: \\ Windows \\ system32 \\ config \\ systemprofile
                               Refcount         : 1
                               Sid              : {1, 1, 0, 0...}
                               State            : 0
S-1-5-19                       ProfielImagePath :
C:\Windows\ServiceProfiles\LocalService
                                          Flags : 0
                               State            : 0
S-1-5-20                       ProfileImagePath : C: \\ Windows \\ ServiceProfiles \\ NetworkService
                                            Flags : 0
                               State            : 0
S-1-5-21-3385963305-808838737- ProfileImagePath                        : C: \\ Users \\ defaultuser0
1911667508-1000                Flags                                  : 0
                               State                                   : 0
                               Sid                                     : {1, 5, 0, 0...}
                               ProfileAttemptedProfileDownloadTimeLow  : 0
                               ProfileAttemptedProfileDownloadTimeHigh : 0
                               ProfileLoadTimeLow                     : 0
                               ProfileLoadTimeHigh                     : 0
                               RefCount                                : 0
                               RunLogonScriptSync                      : 0
S-1-5-21-3385963305-808838737- ProfileImagePath                        : C: \\ Users \\ Adam
1911667508-1002                Flags                                   : 0
                               State                                   : 0
                               Sid                                     : {1, 5, 0, 0...}
                               ProfielAttemptedProfileDownloadTimeLow  : 0
                               ProfielAttemptedProfileDownloadTimeHigh : 0
                               ProfileLoadTimeLow                     : 0
                               ProfileLoadTimeHigh                     : 0
                               RefCount                                : 15
                               RunLogonScriptSync                      : 0

 

Het is een begin om deze profielen te kunnen zien, maar we zullen ergens de specifieke mappaden in ons script moeten gebruiken. Daarvoor hoeven we alleen de waarden van ProfileImagePath voor elke gebruiker te zien. Als u de registerwaarde voor elk van de subsleutels van de gebruiker wilt retourneren, roepen we de methode GetValue() aan op elk van de registersleutels om alleen het pad naar het gebruikersprofiel te zien.

PS> Get-ChildItem 'HKLM: \\ Software \\ Microsoft \\ Windows NT \\ CurrentVersion \\ ProfileList' | ForEach-object { $_. GetValue('ProfileImagePath') }
C: \\ Windows \\ system32 \\ config \\ systemprofile
C:\Windows\ServiceProfiles\LocalService
C:\Windows\ServiceProfiles\NetworkService
C:\Users\defaultuser0
C:\Users\Adam

Door elke registersleutel met ForEach-Object te herhalen en vervolgens de methode GetValue() aan te roepen op elke ProfileImagePath-value, worden nu alleen de paden geretourneerd die we zoeken. Zodra u de paden naar elk gebruikersprofiel hebt, kunnen extra controles of codes worden uitgevoerd op elke map. Het tijdelijke mappad van elke gebruiker bevindt zich bijvoorbeeld in de map AppData\Local\Temp . Om de tijdelijke map van elke gebruiker op te sommen, kunt u een opdracht in uw lus toevoegen om die bestanden weer te geven.




"$profilePath\AppData\Local\Temp" }

Zodra u een lus hebt die elk gebruikersprofielpad bevat, staat u open voor alles wat u wilt om bestanden of mappen binnen elk van die paden te maken!

 

 

 


Comments
Comments are disabled in preview mode.