28

ユーザーSIDを探していません。ActiveDirectoryがコンピューターを一意に識別するために使用するコンピューターSIDを探しています。また、Active Directoryサーバーにクエリを実行したくないので、コンピューター自体にクエリを実行します。

4

3 に答える 3

45

(ああ、これは楽しいものでした!彼らが言うように、私はワイルドグースチェイスを行って、Win32_SIDインスタンスを取得しようとしました。これはシングルトンであり、通常のInstancesOfまたはQueryメソッドでは列挙できません... yadda yadda yadda。)

まあ、それはあなたが望むコンピュータSIDに依存します(真剣に!)。ローカルコンピューターがそれ自体に使用するSIDがあります...このためには、ローカル管理者ユーザーのSIDを取得し、最後から「-500」を削除してコンピューターのSIDを取得する必要があります。

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では、次のようになります。

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)

.NET 3.5のC#の場合:

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から取得した応答と一致します。


一方、Active Directoryが各ドメインメンバーコンピューターを識別するために使用するSIDがあります...ドメイン内のマシンアカウントのSIDを取得することによって取得するSID(ドル記号で終わるもの)。

たとえば、「CLIENT」というドメインメンバーに対して上記のPowerShell関数を使用すると、と入力できますget-sid "CLIENT$"

于 2010-06-28T18:14:49.463 に答える
2

reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuidWindowsのコマンドラインから簡単に実行できます。

Windowsバッチファイルの例を次に示します。

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%
于 2014-05-10T18:06:19.913 に答える
1

SIDを簡単に取得できるMicrosoftWebサイトのツールを見つけました

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

ファイルをダウンロードして解凍し、コマンドプロンプトを開いて、psgetsid.exeを実行するだけです。

マイクロソフトのウェブサイトからのSIDについてもいくつかの良い説明があります

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

于 2015-01-09T02:07:12.690 に答える