2013-04-10 1 views
2

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

На тестовой машине я установил VisualSVN версию 2.5.8 и корневых хранилища на C: \ хранилища

в то время как на сервере, установленной VisualSVN версии 1.6.3 и корневых репозитории на E: \ хранилища

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

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

+0

Итак, как именно это «не работает»? Как то, что вы получаете, отличается от того, что вы ожидаете? Вы получили сообщение об ошибке? Который? –

+0

На тестовой машине, когда я запускаю команду: ** cscript test.vbs **, она дает результат в формате ** имя_пользователя, путь, уровень **, но на сервере я получаю эту ошибку: test.vbs <5, 1> : 0x8004100E – luv2bfar

+0

Вы можете принять и/или отложить ответ, если это поможет. Благодаря! – bahrep

ответ

1

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

+0

Это то, что я думаю, но хотел бы обеспечить, прежде чем предлагать обновление версии @AnsgarWiechers между благодарностью за ваш быстрый ответ, теперь мне нужно будет найти способ конвертировать файл разрешений Windows (authz-windows), SID формат для читаемого имени пользователя – luv2bfar

+1

@ luv2bfar проверить полный VBScript по адресу http://serverfault.com/a/407148/107134 – bahrep

+0

@bahrep thankx для сценария, я сохранил его для будущего использования после обновления версии VisualSVN. – luv2bfar

0

После ответа Ансгара.

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

Смежные вопросы