Czy istnieje sposób połączenia wartości w HKEY_USERS z rzeczywistą nazwą użytkownika?
Widziałem kilka podobnych pytań, ale większość (jeśli nie wszystkie) mówi o kodzie C#, a moja potrzeba jest w VBScript.Uzyskiwanie nazwy użytkownika z wartości HKEY_USERS
Odpowiedz
Jeśli spojrzeć na jeden z następujących klawiszy:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist
można znaleźć listę SID tam z różnymi wartościami, w tym w ich domu „ścieżek”, który obejmuje ich nazw użytkowników.
Nie jestem pewien, jak bardzo jest to niezawodne i nie polecałabym się z tym bawić, chyba że jesteś naprawdę pewien, co robisz.
Możliwe jest zapytanie do tej informacji z WMI. Poniższe polecenie wyświetli tabelę z wierszem dla każdego użytkownika wraz z identyfikatorem SID dla każdego użytkownika.
wmic useraccount get name,sid
Można także eksportować te informacje do pliku CSV:
wmic useraccount get name,sid /format:csv > output.csv
Użyłem tego na Vista i 7. Aby uzyskać więcej informacji, zobacz WMIC - Take Command-line Control over WMI.
Niestety, identyfikatory SID, które otrzymuję, nie pasują do wartości pod HKEY_USERS na Windows 7 x64. –
Możliwe, że legitymowany identyfikator SID jest pozornie nieobecny, ponieważ gałąź tego użytkownika nie jest w tym momencie załadowana.'Runas/profile/user: desireduser somearbitrarycommand' załaduje go. – amonroejj
Sporządzono go, by trochę kreatywnego programowania
ENUM klucze w HKEY_USERS dla tych zabawnych klawiszy numerycznych ...
ENUM klucze w HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \
a znajdziesz te same numery .... teraz w tych kluczy spojrzeć na wartości String: ProfileImageP ath = "SomeValue", gdzie wartości są albo:
"% systemroot% \ system32 \ config \ systemprofile" ... nie interesuje ten ... jak jej nie ścieżki katalogu ...
% SystemDrive% \ Documents and Settings \ LocalService - "Usługi lokalne" % SystemDrive% \ Documents and Settings \ sieciowa "Usługa sieciowa"
lub
% SystemDrive% \ Documents and Settings \ nazwa_użytkownika, co przekłada bezpośrednio do wartości "USERNAME" w większości nieuszkodzonych systemów, tj. gdzie użytkownik nie zmienił nazwy użytkownika po kilku tygodniach lub wyraźnie zmienił ścieżki ...
Otwarte Reg HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \
zrobić pętlę, aby uzyskać wszystkie podklucze
podklucze jesteście zainteresowani są te kroki z [ S-1-5-21-] co oznacza użytkownika (patrz nazwa klucza [ProfileImagePath], zawsze zaczyna się od ścieżki c: \ Users)
Osoby rozpoczynające się od [S-1-5-21-12] są wszyscy użytkownicy lokalni
Osoby rozpoczynające się od [S-1-5-21-13] są użytkownikami sieci [, jeśli są przyłączeni do sieci Domained], które wcześniej były zalogowane na komputerze.
3 zawiera błąd, a nie mądre porady. [ProfileImagePath] nie musi zaczynać się od ścieżki c: \ Users ... Zobacz https://www.google.com/#hl=en&tbo=d&output=search&sclient=psy-ab&q=move+windows+7+ użytkownik + katalog; Ponadto, jak w innym miejscu, skomentował ten wątek i wspomniano o @spade, jeśli użytkownik/administrator zmienił nazwę użytkownika, tworząc konto i logując się, nazwa katalogu profilu nie będzie już pasować do nazwy użytkownika (http://support.microsoft.com)/kb/2454362) – user66001
for /f "tokens=8 delims=\" %a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist" ^| find "UsrClass.dat"') do echo %a
Możesz użyć znaczników 'code'" do sformatowania tego przykładu kodu :) – summea
Można użyć PSGetSid polecenia z zespołu Microsoft SysInternals.
pobierania URL: http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx
Zastosowanie:
psgetsid [\\computer[,computer[,...] | @file] [-u username [-p password]]] [account|SID]
-u Specifies optional user name for login to remote computer.
-p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
Account PsGetSid will report the SID for the specified user account rather than the computer.
SID PsGetSid will report the account for the specified SID.
Computer Direct PsGetSid to perform the command on the remote computer or computers specified. If you omit the computer name PsGetSid runs the command on the local system, and if you specify a wildcard (\\*), PsGetSid runs the command on all computers in the current domain.
@file PsGetSid will execute the command on each of the computers listed in the file.
przykład:
psgetsid S-1-5-21-583907252-682003330-839522115-63941
Uwaga:
- W przypadku, gdy użytkownik jest domena/AD (LDAP) użytkownik , uruchamiając to na dowolnym komputerze er w domenie powinien dawać takie same wyniki.
- W przypadku, gdy użytkownik jest lokalny dla urządzenia, polecenie należy uruchomić na tym komputerze lub należy określić komputer za pomocą parametru opcjonalnego.
Aktualizacja
Jeśli używasz PowerShell, następujące mogą być przydatne do rozwiązywania wszelkich użytkowników AD wymienione:
#create a drive for HKEY USERS:
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue
#List all immediate subfolders
#where they're a folder (not a key)
#and they's an SID (i.e. exclude .DEFAULT and SID_Classes entries)
#return the SID
#and return the related AD entry (should one exist).
Get-ChildItem -Path 'HKU:\' `
| ?{($_.PSIsContainer -eq $true) `
-and ($_.PSChildName -match '^S-[\d-]+$')} `
| select @{N='SID';E={$_.PSChildName}} `
, @{N='Name';E={Get-ADUser $_.PSChildName | select -expand Name}}
Można również udoskonalenie SID filtrować dalej tylko wycofaj te identyfikatory SID, które zostaną rozwiązane na konto AD, jeśli chcesz; Więcej na temat struktury SID tutaj: https://technet.microsoft.com/en-us/library/cc962011.aspx
szukając mojego identyfikatora użytkownika w rejestrze, znalazłem
HKEY_CURRENT_USER\Volatile Environment\Username
- 1. Uzyskiwanie nazwy koloru za pomocą wartości heksadecymalnej?
- 2. Uzyskiwanie nazwy kolumn z AbstractTableModel
- 3. Jak programowo znaleźć klucz rejestru HKEY_USERS użytkowników przy użyciu powershell?
- 4. Uzyskiwanie użytkownika Tomcat w Javie
- 5. uzyskiwanie pełnej nazwy zespołu
- 6. Uzyskiwanie nazwy aktywnego okna
- 7. Uzyskiwanie nazwy deklarowanej klasy?
- 8. Konwersja nazwy użytkownika na ciąg SID w C#/.NET
- 9. Uzyskiwanie wartości appdelegate z viewcontroller
- 10. Uzyskiwanie wartości z komórki Gridview
- 11. Uzyskiwanie wartości zwracanych z Task.WhenAll
- 12. Uzyskiwanie wartości z textarea TinyMCE
- 13. Uzyskiwanie wartości z konfiguracji Log4Net
- 14. GDB: Uzyskiwanie nazwy symbolu z adresu pamięci
- 15. Uzyskiwanie nazwy kraju użytkownika pochodzącego z adresu IP z Ruby on Rails
- 16. Uzyskiwanie określonych wartości węzłów z dokumentu XML
- 17. Uzyskiwanie języka i języka użytkownika użytkownika
- 18. Identyfikator użytkownika do nazwy użytkownika tweepy
- 19. Uzyskiwanie nazwy klasy dla rejestrowania
- 20. Uzyskiwanie danych wprowadzanych przez użytkownika W Ruby
- 21. Uzyskiwanie poprzedniej wartości zestawu ComboBox
- 22. Identyfikator użytkownika Tweepy z podanej nazwy
- 23. Aplikacja Facebook: pobranie nazwy użytkownika z identyfikatora
- 24. Hibernacja, uzyskiwanie zduplikowanych wartości
- 25. Uzyskiwanie HttpActionExecutedContext Wartości wyników
- 26. xml.dom.minidom: Uzyskiwanie wartości CDATA
- 27. Uzyskiwanie wartości czujnika światła
- 28. Uzyskiwanie bieżącego użytkownika, gdy wcieliła
- 29. Uzyskiwanie jednej wartości z krotki python
- 30. Uzyskiwanie pierwszej wartości z mapy w C++
Dokładnie to, czego potrzebowałem. Dzięki! – modz0r
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ hivelist wydaje się być tylko aktualnie zalogowanym użytkownikiem w każdym systemie (Xp - 7), na który patrzyłem ... I nie brałbym pod uwagę HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ \ ProfileImagePath niezawodny sposób określania nazwy użytkownika (Zobacz http://support.microsoft.com/kb/2454362). –
user66001