Сценарий VB для получения отчетов о правах доступа из Visual SVN

Пока я работал над преобразованием SID, я нашел работающий скрипт с VirsualSVN, установленным на тестовой машине, но скрипт не работал на сервере. Я сохранил файл как test.vbs, поместил его на рабочий стол и использовал следующую команду для выполнения кода и создания вывода в виде текстового файла: cscript test.vbs > c:\output.txt

На тестовой машине я установил VisualSVN версии 2.5.8 и корневые репозитории находятся в папке C:\Repositories.

На сервере установлен VisualSVN версии 1.6.3 и корневые репозитории находятся в E:\Repositories.

Судя по приведенному ниже сценарию, мне не хватает кода, и я не знаю, где мне изменить сценарий, чтобы он работал на сервере? Я ищу вашей экспертной помощи по этому вопросу.

'
' 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

' 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
    sid = perm.Account.SID
    level = AccessLevelToText(perm.AccessLevel)

     Wscript.Echo SidToUserName(sid) & "," & GetPath(assoc) & "," & level
   Next
Next

Ссылка на код с http://www.svnforum.org/threads/38790-Access-Rights-Reporting-in-Subversion-or-Viusal-SVN


person luv2bfar    schedule 10.04.2013    source источник
comment
Итак, как именно это не работает? Чем то, что вы получаете, отличается от того, что вы ожидаете? Вы получаете ошибку? Который?   -  person Ansgar Wiechers    schedule 10.04.2013
comment
На тестовой машине, когда я запускаю команду: cscript test.vbs, она выдает результат в формате user_name,path,level, но на сервере я получаю эту ошибку: test.vbs‹5, 1›‹null›: 0x8004100E   -  person luv2bfar    schedule 10.04.2013
comment
Вы можете принять и/или проголосовать за ответ, если он помог. Спасибо!   -  person bahrep    schedule 28.08.2014


Ответы (2)


0x8004100e означает, что пространство имен (/root/VisualSVN) не существует. Возможно, версия, установленная на сервере, слишком старая и не создает это пространство имен в WMI.

person Ansgar Wiechers    schedule 10.04.2013
comment
Это то, о чем я думаю, но хотел бы убедиться, прежде чем обновлять версию @AnsgarWiechers между спасибо за ваш быстрый ответ, теперь мне нужно будет найти способ конвертировать файл разрешений на основе Windows (authz-windows), формат SID к читаемому имени пользователя - person luv2bfar; 10.04.2013
comment
@bahrep спасибо за скрипт, я сохранил его для будущего использования после обновления версии VisualSVN. - person luv2bfar; 11.04.2013

После ответа @Ansgar.

Версии VisualSVN Server старше 2.0 не могут управляться через WMI.

person bahrep    schedule 10.04.2013