Kullanıcı SID'lerini aramıyorum. Bilgisayarı benzersiz bir şekilde tanımlamak için kullanacağım bilgisayar SID'sini arıyorum. Ayrıca aktif dizin sunucusunu sorgulamak istemiyorum, bilgisayarın kendisini sorgulamak istiyorum.WMI kullanarak Windows Bilgisayarın SID'sini nasıl alabilirim?
cevap
(Ooh, bu eğlenceli bir şeydi!) Dedikleri gibi, her zamanki InstancesOf veya Query yöntemleri tarafından numaralandırılamaz bir singleton olan Win32_SID örneğini almaya çalıştıklarında, vahşi bir kaz kovalamaca gittim ... yadda vesaire vesaire.)
Eh, ciddiye (istediğiniz bilgisayar SID bağlıdır!). yerel bilgisayar kendisi için kullandığı SID var ... Bunun için, sadece yerel yönetici kullanıcı SID almak ve bilgisayarın SID'ini almak için ucundan "-500" kaldırmak gerekir.
VBScript , bu şuna benzer: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)
PowerShell, bu gibi:
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)
yılında C# .NET 3.5 tarih:
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;
}
Bunların tümündenSonuçlar ben PsGetSid.exe aldığım yanıt maçı. ile biter one - Öte yandan
Active Directory her etki alanı üyesi bilgisayar tanımlamak için kullandığı SID ... Eğer etki alanında makine hesabının SID alarak getirme İşte bir tane var dolar işareti. "MÜŞTERİ" olarak adlandırılan bir alan üye için yukarıdaki PowerShell işlevini kullanarak
Ör, sen get-sid "CLIENT$"
yazabilirsiniz.
+1 Farklı örnekler sunmanın yanında güzel bir açıklama. – Garett
$ ID.Translate ([System.Security.Principal.SecurityIdentifier]) - zaten döndürür bilgisayar sid (AccountDomainSid) vardır, ben kullanıcı herhangi niteliğini ayırt edebilmek için-Sid Get dizeye kimliği dönüştürmek denemeyin öneririm - bu durumda AccountDomainSid. PowerShell sürümüne – shalomb
sadece bir yan not: '$ admin.SubString (0, $ admin.length() - 4)' '$ admin.SubString olmalıdır (0, $ admin.Length - 4)' sırayla çalışmak .. – Luke
Windows komut satırından reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
'u çalıştırabilirsiniz.
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%
aynı şey değil, bu GUID makine SID DEĞİLDİR. – Anders
kolayca
http://technet.microsoft.com/en-us/sysinternals/bb897417.aspx
Sadece dosya indirmek size SID'yi alabilirsiniz microsoft web sitesinden bir araç, bu, bir açıp halletmek Bulunan: Burada
Windows toplu dosya örneğidir komut istemi ve sonra psgetsid.exe dosyasını çalıştırın.microsoft web sitesinden SID üzerinde bazı iyi açıklama yanı vardır
http://blogs.msdn.com/b/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx
Windows'un yeni yüklemesiyle bilgisayar SID değişiyor mu? yani, sistem örneğini özel mi, yoksa donanım tabanlı mı? – Cel