Tôi không tìm kiếm User SID. Tôi đang tìm SID máy tính, thư mục hoạt động sẽ sử dụng để nhận dạng duy nhất máy tính. Tôi cũng không muốn truy vấn máy chủ thư mục hoạt động, tôi muốn truy vấn chính máy tính.Làm cách nào để truy xuất SID của Windows Computer bằng WMI?
Trả lời
(Ooh, đây là một niềm vui! Tôi đã đi trên một ngỗng hoang dã đuổi theo, như họ nói, cố gắng để có được ví dụ Win32_SID, mà là một singleton và không enumerable bởi InstancesOf bình thường hoặc phương pháp truy vấn ... yadda yadda yadda.)
Vâng, nó phụ thuộc vào SID máy tính nào bạn muốn (nghiêm túc!). Có SID mà máy tính cục bộ sử dụng cho chính nó ... Đối với điều này, bạn chỉ cần lấy SID của người dùng Administrator cục bộ và loại bỏ "-500" từ đầu để lấy SID của máy tính.
Trong VBScript, nó trông như thế này:
strComputer = "AFAPC001"
strUsername = "Administrator"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objAccount = objWMIService.Get("Win32_UserAccount.Name='" & strUsername & "',Domain='" & strComputer & "'")
WScript.Echo "Administrator account SID: " & objAccount.SID
WScript.Echo "Computer's SID: " & Left(objAccount.SID, Len(objAccount.SID) - 4)
Trong PowerShell, như thế này:
function get-sid
{
Param ($DSIdentity)
$ID = new-object System.Security.Principal.NTAccount($DSIdentity)
return $ID.Translate([System.Security.Principal.SecurityIdentifier]).toString()
}
> $admin = get-sid "Administrator"
> $admin.SubString(0, $admin.Length - 4)
Trong C# trên .NET 3.5:
using System;
using System.Security.Principal;
using System.DirectoryServices;
using System.Linq;
public static SecurityIdentifier GetComputerSid()
{
return new SecurityIdentifier((byte[])new DirectoryEntry(string.Format("WinNT://{0},Computer", Environment.MachineName)).Children.Cast<DirectoryEntry>().First().InvokeGet("objectSID"), 0).AccountDomainSid;
}
Kết quả từ tất cả những điều này khớp với câu trả lời tôi nhận được từ PsGetSid.exe.
Mặt khác, có SID rằng Active Directory sử dụng để xác định mỗi máy tính thành viên miền ... Đó là một trong những bạn lấy bằng cách SID của tài khoản máy trong lĩnh vực - một trong đó kết thúc với một ký hiệu đô la.
Ví dụ: bằng cách sử dụng chức năng PowerShell ở trên cho thành viên tên miền "CLIENT", bạn có thể nhập get-sid "CLIENT$"
.
+1 Giải thích tuyệt vời cùng với việc cung cấp các ví dụ khác nhau. – Garett
$ ID.Translate ([System.Security.Principal.SecurityIdentifier]) - đã trả về sid máy tính (AccountDomainSid), tôi đề nghị Get-Sid không cố chuyển đổi Id thành chuỗi để người dùng có thể chọn bất kỳ thuộc tính nào - trong trường hợp này là AccountDomainSid. – shalomb
chỉ là một lưu ý phụ trên phiên bản PowerShell: '$ admin.SubString (0, $ admin.length() - 4)' nên là '$ admin.SubString (0, $ admin.Length - 4)' để làm việc .. – Luke
Bạn chỉ cần chạy reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
từ dòng lệnh của Windows.
Dưới đây là Windows batch file ví dụ:
set KEY_REGKEY=HKLM\SOFTWARE\Microsoft\Cryptography
set KEY_REGVAL=MachineGuid
REM Check for presence of key first.
reg query %KEY_REGKEY% /v %KEY_REGVAL% 2>nul || (echo No theme name present! & exit /b 1)
REM query the value. pipe it through findstr in order to find the matching line that has the value. only grab token 3 and the remainder of the line. %%b is what we are interested in here.
set KEY_NAME=
for /f "tokens=2,*" %%a in ('reg query %KEY_REGKEY% /v %KEY_REGVAL% ^| findstr %KEY_REGVAL%') do (
set KEY_NAME=%%b
)
echo %KEY_NAME%
Đây là không giống nhau, GUID này KHÔNG phải là SID máy. – Anders
Tìm thấy một công cụ từ trang web của microsoft mà có thể giúp bạn có được SID dễ dàng
http://technet.microsoft.com/en-us/sysinternals/bb897417.aspx
Chỉ cần tải về tập tin, giải nén nó, mở một dấu nhắc lệnh và sau đó chạy psgetsid.exe.
Có một số lời giải thích tốt về SID từ trang web của microsoft cũng
http://blogs.msdn.com/b/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx
- 1. Làm cách nào để truy xuất nút cha bằng XQuery?
- 2. Làm cách nào để truy xuất trang web bằng C#?
- 3. Làm cách nào để truy xuất tên Enum bằng id?
- 4. Cách nhận SID đăng nhập trong C#
- 5. Làm cách nào tôi có thể truy xuất số phiên bản của Windows EXE hoặc DLL?
- 6. Làm cách nào để truy xuất ImageUri của một ImageView?
- 7. Làm cách nào để cải thiện hiệu năng WMI bằng delphi?
- 8. Truy vấn WMI trong C?
- 9. Cho SID của người dùng, làm cách nào để nhận userPrincipalName của họ?
- 10. Làm cách nào để truy xuất tên người dùng mà dịch vụ Windows đang chạy?
- 11. Làm cách nào để truy xuất chuỗi lỗi từ WSAGetLastError()?
- 12. Cách tham gia vào Truy vấn WMI (WQL)
- 13. Có cách nào để tạo mã/lớp WMI không?
- 14. Làm cách nào để đặt trình duyệt mặc định trong windows 8 bằng C#?
- 15. Làm cách nào để truy xuất giá trị thành phần JSF bằng cách sử dụng EL?
- 16. Làm cách nào để truy xuất ISP của khách truy cập thông qua PHP?
- 17. Làm cách nào để truy xuất đường dẫn đến dylib của tôi khi chạy?
- 18. Magento:? ___ SID = U xuất hiện trong một số url
- 19. Robotics và Computer Vision
- 20. Tôi làm cách nào để truy xuất thông tin màn hình?
- 21. Cách tốt nhất để giải quyết tên người dùng hiển thị bằng SID là gì?
- 22. Làm cách nào để truy xuất Composer qua Ant?
- 23. Làm cách nào để truy xuất FacesContext trong Bộ lọc
- 24. Làm cách nào để chuyển đổi từ SID sang tên tài khoản trong C#
- 25. Làm cách nào để truy xuất dữ liệu mới?
- 26. Làm cách nào để phát hiện chèn USB mà không cần bỏ phiếu bằng Ruby và WMI?
- 27. Làm cách nào để truy xuất toàn bộ URL bằng các tham số?
- 28. Làm cách nào để truy xuất từ Parcel a CharSequence đã được lưu bằng TextUtils.writeToParcel (...)?
- 29. Làm cách nào để truy xuất ảnh từ một nhóm Facebook bằng API đồ thị?
- 30. Làm cách nào để truy cập vào dòng lệnh MySQL bằng XAMPP cho Windows?
Liệu sự thay đổi SID máy tính với một cài đặt mới của Windows? tức là nó là hệ điều hành cụ thể, hoặc là nó dựa trên phần cứng? – Cel