2010-06-28 14 views
24

मैं उपयोगकर्ता एसआईडी की तलाश नहीं कर रहा हूं। मैं कंप्यूटर एसआईडी की तलाश में हूं, जो सक्रिय निर्देशिका कंप्यूटर की विशिष्ट पहचान करने के लिए उपयोग करेगी। मैं सक्रिय निर्देशिका सर्वर से भी पूछना नहीं चाहता हूं, मैं कंप्यूटर से खुद पूछना चाहता हूं।मैं डब्ल्यूएमआई का उपयोग कर विंडोज कंप्यूटर के एसआईडी को कैसे प्राप्त कर सकता हूं?

+0

विंडोज की एक नई स्थापना के साथ कंप्यूटर सिड परिवर्तन करता है? यानी यह ऑपरेटिंग सिस्टम इंस्टेंस विशिष्ट है, या यह हार्डवेयर आधारित है? – Cel

उत्तर

38

(ओह, यह एक मजेदार था! मैं एक जंगली हंस चेस पर चला गया, जैसा कि वे कहते हैं, Win32_SID उदाहरण प्राप्त करने का प्रयास कर रहा है, जो एक सिंगलटन है और सामान्य इंस्टेंसऑफ या क्वेरी विधियों द्वारा समझा नहीं जा सकता है ... yadda yadda yadda।)

अच्छा, यह निर्भर करता है कि आप कौन सी कंप्यूटर एसआईडी चाहते हैं (गंभीरता से!)। एसआईडी है कि स्थानीय कंप्यूटर स्वयं के लिए उपयोग करता है ... इसके लिए, आपको स्थानीय प्रशासक उपयोगकर्ता के एसआईडी को प्राप्त करने की आवश्यकता है, और कंप्यूटर के एसआईडी प्राप्त करने के लिए अंत में "-500" को हटा दें। .NET 3.5 पर

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) 

में सी #:

में VBScript, यह इस तरह दिखता है:

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 में, इस तरह

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; 
} 

इन सभी मिलानों के परिणाम मुझे PsGetSid.exe से प्राप्त प्रतिक्रिया से मिलता है। एक है कि साथ समाप्त होता है -


दूसरी ओर, वहाँ सिड सक्रिय निर्देशिका प्रत्येक डोमेन सदस्य कंप्यूटर की पहचान के लिए उपयोग करता है ... यह एक आप डोमेन मशीन खाते के सिड हो रही द्वारा लाने है एक डॉलर का संकेत

उदा।, "क्लाइंट" नामक डोमेन सदस्य के लिए उपरोक्त PowerShell फ़ंक्शन का उपयोग करके, आप get-sid "CLIENT$" टाइप कर सकते हैं।

+0

+1 विभिन्न उदाहरण प्रदान करने के साथ अच्छा स्पष्टीकरण। – Garett

+1

$ आईडी। ट्रांसस्लेट ([सिस्टम.Security.Principal.SecurityIdentifier]) - पहले से ही कंप्यूटर सिड (AccountDomainSid) लौटा चुका है, मैं सुझाव दूंगा कि गेट-सिड आईडी को स्ट्रिंग में बदलने का प्रयास नहीं करता है ताकि उपयोगकर्ता कोई विशेषता चुन सके - इस मामले में AccountDomainSid। – shalomb

+0

पावरशेल संस्करण पर बस एक साइड नोट: '$ admin.SubString (0, $ admin.length() - 4)' $ admin होना चाहिए। सबस्ट्रिंग (0, $ admin.Length - 4) 'काम करने के लिए .. – Luke

2

आप आसानी से विंडोज कमांड लाइन से reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid चला सकते हैं।

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% 
+0

यह है एक ही बात नहीं, यह GUID मशीन एसआईडी नहीं है। – Anders

1

मिले माइक्रोसॉफ्ट की वेबसाइट से एक उपकरण है जो आप सिड प्राप्त कर सकते हैं आसानी से

http://technet.microsoft.com/en-us/sysinternals/bb897417.aspx

बस फाइल डाउनलोड, अनज़िप यह एक खोलें:

यहाँ विंडोज बैच फ़ाइल उदाहरण है कमांड प्रॉम्प्ट और फिर psgetsid.exe चलाएं।

रूप में अच्छी तरह माइक्रोसॉफ्ट की वेबसाइट से सिड पर कुछ अच्छी व्याख्या कर रहे हैं

http://blogs.msdn.com/b/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx

संबंधित मुद्दे

 संबंधित मुद्दे