web-dev-qa-db-ja.com

Active DirectoryユーザーIDを取得するにはどうすればよいですか?

まず、ここで"user ID"が正しい用語であるかどうかさえわかりません。

コンテキストは、VisualSVNサーバーを使用して、Windows認証とauthz-windows作成するファイルには、「人間が読める」ユーザー名やグループ名ではなく、45文字の長い文字列が含まれています。

このファイルを手動で編集する必要があるので、特定のユーザーまたはグループに関連付けられている魔法の文字列を確認するにはどうすればよいですか?

2
detly

authz-windowsファイルは、Active DirectoryユーザーとグループのSIDをマップします(objectSid LDAPフィールド)。

ただし、ADのこのフィールドの値は16進数として格納されるため、 以前の回答の一部 を使用して、関連付けられたユーザーIDを特定できます。

PowerShellの例 StackOverflowで。)

4
Max Kochubey

2016年更新:

VisualSVNサーバーの最新バージョンにアップグレードします。 VisualSVN Server 3.4以降、サーバーには多数のPowerShellコマンドレットが付属しています。それらのいくつかは Get-SvnAccessRule Active Directory/Windowsユーザーおよびグループアカウントに割り当てられたアクセスルールのリストを出力できます。

次に、CSVファイルAccessReport.csvでアクセスルールレポートを生成する例を示します。

Get-SvnAccessRule | Select Repository, Path, AccountName, Access | Export-Csv -NoTypeInformation AccessReport.csv

VisualSVNサーバーPowerShellコマンドレットの詳細については、記事 KB88:VisualSVNサーバーPowerShellコマンドレットリファレンス を参照してください。


時代遅れの答え:

二日酔いの答えに同意し、次のVBScriptがお役に立てば幸いです。定義済みのアクセス許可のリストを作成し、SIDsを意味のある読みやすいDOMAIN\Usernameに適切に変換します。

'
' Print permissions in the form: user_name,path,level
'
strComputer = "."
Set wmi = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" _
  & strComputer & "\root\VisualSVN")

Set win = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" _
  & strComputer & "\root\cimv2")

' Return text representation for the Access Level
Function AccessLevelToText(level)
  If level = 0 Then
    AccessLevelToText = "No Access"
  ElseIf level = 1 Then
    AccessLevelToText = "Read Only"
  ElseIf level = 2 Then
    AccessLevelToText = "Read/Write"
  Else 
    AccessLevelToText = "Unknown"
  End If
End Function

' Return repository path for the object
Function GetPath(obj)
  cname = assoc.Path_.Class
  If cname = "VisualSVN_Service" Then
    GetPath = "Repositories Root"
  ElseIf cname = "VisualSVN_Repository" Then
    GetPath = assoc.Name
  ElseIf cname = "VisualSVN_RepositoryEntry" Then
    GetPath = assoc.RepositoryName & ": " & assoc.Path
  Else
    GetPath = "Unknown"
  End If
End Function

' Convert SID to user name
Function SidToUserName(sid)
  Set account = win.Get("Win32_SID.SID='" & sid & "'")
  user = account.AccountName
  domain = account.ReferencedDomainName
  SidToUserName = domain & "\" & user
End Function

' Return user name associated with account
Function GetAccountName(account)
  If account.Path_.Class = "VisualSVN_WindowsAccount" Then
    GetAccountName = SidToUserName(account.SID)
  Else
    GetAccountName = account.Name
  End If
End Function

' Iterate over all security descriptions
Set objs = wmi.ExecQuery("SELECT * FROM VisualSVN_SecurityDescriptor")
For Each obj In objs
  Set assoc = wmi.Get(obj.AssociatedObject)

  For Each perm in obj.Permissions
    name = GetAccountName(perm.Account)
    level = AccessLevelToText(perm.AccessLevel)

    Wscript.Echo name & "," & GetPath(assoc) & "," & level
  Next
Next
3
bahrep