none
mof права пользователей RRS feed

Ответы

  • Если вы хотите добавить в SMS_DEF.MOF кусок кода, который будет инвентаризировать список групп, в которых находится текущий залогиненный пользователь - то ничего не получится.

     

    1. Аппаратная инвентаризация не взаимодействует с пользователями.

    2. Не рекомендуется с помощью SMS_DEF.MOF проводит инвентаризацию членства в группах (хотя возможно). Эти действия вызовут большой траффик с доменными контроллерами.

     

     

    Вам нужен скрипт, который запускается для пользователя, получает списко его групп и создает MIF файл.

    А уже с помощью SMS вы собираете эти MIF файлы.

     

    Вот скрипт, который инвентаризирует кто именно входит в группу локальных админов. Модифицировать его думаю у вас получится.

     

     


    Code Snippet
    Option explicit
    On Error Resume Next
    'Constants for file I/O
    CONST ForReading = 1, ForWriting = 2, ForAppending = 8
    'Constants for WbemCIMTypes
    Dim wbemCimtypeSint16
    Dim wbemCimtypeSint32
    Dim wbemCimtypeReal32
    Dim wbemCimtypeReal64
    Dim wbemCimtypeString
    Dim wbemCimtypeBoolean
    Dim wbemCimtypeObject
    Dim wbemCimtypeSint8
    Dim wbemCimtypeUint8
    Dim wbemCimtypeUint16
    Dim wbemCimtypeUint32
    Dim wbemCimtypeSint64
    Dim wbemCimtypeUint64
    Dim wbemCimtypeDateTime
    Dim wbemCimtypeReference
    Dim wbemCimtypeChar16
    wbemCimtypeSint16 = 2
    wbemCimtypeSint32 = 3
    wbemCimtypeReal32 = 4
    wbemCimtypeReal64 = 5
    wbemCimtypeString = 8
    wbemCimtypeBoolean = 11
    wbemCimtypeObject = 13
    wbemCimtypeSint8 = 16
    wbemCimtypeUint8 = 17
    wbemCimtypeUint16 = 18
    wbemCimtypeUint32 = 19
    wbemCimtypeSint64 = 20
    wbemCimtypeUint64 = 21
    wbemCimtypeDateTime = 101
    wbemCimtypeReference = 102
    wbemCimtypeChar16 = 103
    'Declare variables
    Dim strTempDir, strWinDir, strComputer
    Dim strOS, strWinVer
    Dim StdOut, objWshShell, objFileSys, objRegistry
    Dim strPrinterKeyPath, strServerKeyPath
    Dim arrPrinters, Printer
    Dim arrServers, Server
    Dim strNoIDMifDir, strMifFile, objMifFile
    Dim intRetVal, intErr, intID
    Dim ClassID
    ClassID = "Microsoft|SMXLocalAdminsMIF|1.0"
    'Create some standard object references.
    Set StdOut = WScript.StdOut
    Set objWshShell = CreateObject("WScript.Shell")
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    strTempDir = objWshShell.ExpandEnvironmentStrings("%Temp%")
    strWinDir = objWshShell.ExpandEnvironmentStrings("%WinDir%")
    'This is the name of the mif file that is created.
    strMifFile = "\LocalAdmins.mif"
    If objFileSys.FileExists(strTempDir & strMifFile) Then _
       objFileSys.DeleteFile(strTempDir & strMifFile)
    'Create object reference to the mif file. (This is a new file)
    If NOT blnOpenFile(strTempDir & strMifFile, objMifFile, ForAppending) Then
       intErr = 1
       Call Cleanup
    End If
    objMifFile.Writeline "Start Component"
    objMifFile.Writeline "  Name = " & Chr(34) & "WORKSTATION" & Chr(34)
    Dim oLocation, oServices, oInstances, oObject, oDataObject, oNewObject, oRptObject, sField
    Set oLocation = CreateObject("WbemScripting.SWbemLocator")
    Set oServices = oLocation.ConnectServer(, "root\cimv2")
    'Add Instances to data class
    Set oServices = oLocation.ConnectServer(, "root\cimv2")
    Dim sComputerName
    Dim sQuery
    dim iColon
    Set oInstances = oServices.ExecQuery("SELECT * FROM Win32_ComputerSystem")
    FOR EACH oObject in oInstances
    sComputerName = oObject.Name
    NEXT
    sQuery = "select partcomponent from win32_groupuser where groupcomponent = ""\\\\" & sComputerName & "\\root\\cimv2:Win32_Group.Domain=\""" & sComputerName & "\"",Name=\""Administrators\"""""
    Set oInstances = oServices.ExecQuery(sQuery)
    intID = 1
    FOR EACH oObject in oInstances
    objMifFile.Writeline "  Start Group"
    objMifFile.Writeline "    Name = " & Chr(34) & "Local Admins" & Chr(34)
    objMifFile.Writeline "    ID = " & intID
    objMifFile.Writeline "    Class = " & Chr(34) & ClassID & Chr(34)
    objMifFile.Writeline "    Start Attribute"
    objMifFile.Writeline "      Name = " & Chr(34) & "Account" & Chr(34)
    objMifFile.Writeline "      ID = 1"
    objMifFile.Writeline "      ACCESS = READ-ONLY"
    objMifFile.Writeline "      Storage = Specific"
    objMifFile.Writeline "      Type = String(100)"
    sField = oObject.PartComponent
    sfield = mid(sfield, instr(1, sfield, chr(46)) + 1)
    If Instr(1, sfield, Chr(92), 1) > 0 Then sfield = Replace(sfield, Chr(92), Chr(92) & Chr(92), 1, -1, 1)
    If Instr(1, sfield, Chr(34), 1) > 0 Then sfield = Replace(sfield, Chr(34), Chr(39), 1, -1, 1)
    objMifFile.Writeline "      Value = " & Chr(34) & sfield & Chr(34)
    objMifFile.Writeline "    End Attribute"
    objMifFile.Writeline "  End Group"
    intID = intID + 1
    NEXT
    objMifFile.Writeline "End Component"
    objMifFile.Close
    strNoIDMifDir = objWshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _
       "SMS\Client\Configuration\Client Properties\NOIDMIF Directory")
    If intErr <> 1 Then
       If objFileSys.FileExists(strNoIDMifDir & strMifFile) Then _
           objFileSys.DeleteFile(strNoIDMifDir & strMifFile)
       If objFileSys.FileExists(strTempDir & strMifFile) Then _
           objFileSys.MoveFile strTempDir & strMifFile, _
           strNoIDMifDir & strMifFile
    End If
    Call Cleanup

    'Open File Function
    Private Function blnOpenFile(ByVal strFileName, ByRef objMifFile, ByVal intMode)
       blnOpenFile = False
       'Verify that a filename was passed
       If IsEmpty(strFileName) OR strFileName = "" Then
         blnOpenFile = False
         Exit Function
       End If
       'Verify objFileSys exists
       If Not IsObject(objFileSys) Then _
         Set objFileSys = CreateObject("Scripting.FileSystemObject")
       Err.Clear
       'Open the file for I/O
       Set objMifFile = objFileSys.OpenTextFile(strFileName, intMode, True)
       'Error check
       If blnErrorOccurred(" creating object reference to " & strFileName) Then
           blnOpenFile = False
           intErr = 1
           Exit Function
       End If
       blnOpenFile = True
    End Function
    'Error Occurred Function
    Private Function blnErrorOccurred (strIn)
       If Err <> 0 Then
           'Set intermediate variables
           lngMyErr = Err.Number
           strMyErrDesc = Err.Description
           Call WriteLine( " ")
           Call WriteLine( "Error 0x" & CStr(Hex(lngMyErr)) &  " occurred " & strIn)
           Call WriteLine( " ")
           'See if it's a WBEM error
           If blnWBEM_ErrorCheck(lngMyErr) Then
               Call WriteLine( "WBEM error description: " & vbCrLf & strWBEMErrDesc)
               Call WriteLine( " ")
           Else
               If Err.Description <> "" Then _
                   Call WriteLine( "Error description: " & vbCrLf & Err.Description)
                   Call WriteLine( " ")
           End If
           Err.Clear
           blnErrorOccurred = True
           intErr = 1
       Else
           blnErrorOccurred = False
       End If
    End Function
    'Cleanup Sub
    Sub Cleanup
       Set StdOut = Nothing
       Set objWshShell = Nothing
       Set objFileSys = Nothing
       Set objMifFile = Nothing
       Set objRegistry = Nothing
       Wscript.Quit(intErr)
    End Sub

     

     

    2 августа 2007 г. 7:32
    Отвечающий

Все ответы

  • Если вы хотите добавить в SMS_DEF.MOF кусок кода, который будет инвентаризировать список групп, в которых находится текущий залогиненный пользователь - то ничего не получится.

     

    1. Аппаратная инвентаризация не взаимодействует с пользователями.

    2. Не рекомендуется с помощью SMS_DEF.MOF проводит инвентаризацию членства в группах (хотя возможно). Эти действия вызовут большой траффик с доменными контроллерами.

     

     

    Вам нужен скрипт, который запускается для пользователя, получает списко его групп и создает MIF файл.

    А уже с помощью SMS вы собираете эти MIF файлы.

     

    Вот скрипт, который инвентаризирует кто именно входит в группу локальных админов. Модифицировать его думаю у вас получится.

     

     


    Code Snippet
    Option explicit
    On Error Resume Next
    'Constants for file I/O
    CONST ForReading = 1, ForWriting = 2, ForAppending = 8
    'Constants for WbemCIMTypes
    Dim wbemCimtypeSint16
    Dim wbemCimtypeSint32
    Dim wbemCimtypeReal32
    Dim wbemCimtypeReal64
    Dim wbemCimtypeString
    Dim wbemCimtypeBoolean
    Dim wbemCimtypeObject
    Dim wbemCimtypeSint8
    Dim wbemCimtypeUint8
    Dim wbemCimtypeUint16
    Dim wbemCimtypeUint32
    Dim wbemCimtypeSint64
    Dim wbemCimtypeUint64
    Dim wbemCimtypeDateTime
    Dim wbemCimtypeReference
    Dim wbemCimtypeChar16
    wbemCimtypeSint16 = 2
    wbemCimtypeSint32 = 3
    wbemCimtypeReal32 = 4
    wbemCimtypeReal64 = 5
    wbemCimtypeString = 8
    wbemCimtypeBoolean = 11
    wbemCimtypeObject = 13
    wbemCimtypeSint8 = 16
    wbemCimtypeUint8 = 17
    wbemCimtypeUint16 = 18
    wbemCimtypeUint32 = 19
    wbemCimtypeSint64 = 20
    wbemCimtypeUint64 = 21
    wbemCimtypeDateTime = 101
    wbemCimtypeReference = 102
    wbemCimtypeChar16 = 103
    'Declare variables
    Dim strTempDir, strWinDir, strComputer
    Dim strOS, strWinVer
    Dim StdOut, objWshShell, objFileSys, objRegistry
    Dim strPrinterKeyPath, strServerKeyPath
    Dim arrPrinters, Printer
    Dim arrServers, Server
    Dim strNoIDMifDir, strMifFile, objMifFile
    Dim intRetVal, intErr, intID
    Dim ClassID
    ClassID = "Microsoft|SMXLocalAdminsMIF|1.0"
    'Create some standard object references.
    Set StdOut = WScript.StdOut
    Set objWshShell = CreateObject("WScript.Shell")
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    strTempDir = objWshShell.ExpandEnvironmentStrings("%Temp%")
    strWinDir = objWshShell.ExpandEnvironmentStrings("%WinDir%")
    'This is the name of the mif file that is created.
    strMifFile = "\LocalAdmins.mif"
    If objFileSys.FileExists(strTempDir & strMifFile) Then _
       objFileSys.DeleteFile(strTempDir & strMifFile)
    'Create object reference to the mif file. (This is a new file)
    If NOT blnOpenFile(strTempDir & strMifFile, objMifFile, ForAppending) Then
       intErr = 1
       Call Cleanup
    End If
    objMifFile.Writeline "Start Component"
    objMifFile.Writeline "  Name = " & Chr(34) & "WORKSTATION" & Chr(34)
    Dim oLocation, oServices, oInstances, oObject, oDataObject, oNewObject, oRptObject, sField
    Set oLocation = CreateObject("WbemScripting.SWbemLocator")
    Set oServices = oLocation.ConnectServer(, "root\cimv2")
    'Add Instances to data class
    Set oServices = oLocation.ConnectServer(, "root\cimv2")
    Dim sComputerName
    Dim sQuery
    dim iColon
    Set oInstances = oServices.ExecQuery("SELECT * FROM Win32_ComputerSystem")
    FOR EACH oObject in oInstances
    sComputerName = oObject.Name
    NEXT
    sQuery = "select partcomponent from win32_groupuser where groupcomponent = ""\\\\" & sComputerName & "\\root\\cimv2:Win32_Group.Domain=\""" & sComputerName & "\"",Name=\""Administrators\"""""
    Set oInstances = oServices.ExecQuery(sQuery)
    intID = 1
    FOR EACH oObject in oInstances
    objMifFile.Writeline "  Start Group"
    objMifFile.Writeline "    Name = " & Chr(34) & "Local Admins" & Chr(34)
    objMifFile.Writeline "    ID = " & intID
    objMifFile.Writeline "    Class = " & Chr(34) & ClassID & Chr(34)
    objMifFile.Writeline "    Start Attribute"
    objMifFile.Writeline "      Name = " & Chr(34) & "Account" & Chr(34)
    objMifFile.Writeline "      ID = 1"
    objMifFile.Writeline "      ACCESS = READ-ONLY"
    objMifFile.Writeline "      Storage = Specific"
    objMifFile.Writeline "      Type = String(100)"
    sField = oObject.PartComponent
    sfield = mid(sfield, instr(1, sfield, chr(46)) + 1)
    If Instr(1, sfield, Chr(92), 1) > 0 Then sfield = Replace(sfield, Chr(92), Chr(92) & Chr(92), 1, -1, 1)
    If Instr(1, sfield, Chr(34), 1) > 0 Then sfield = Replace(sfield, Chr(34), Chr(39), 1, -1, 1)
    objMifFile.Writeline "      Value = " & Chr(34) & sfield & Chr(34)
    objMifFile.Writeline "    End Attribute"
    objMifFile.Writeline "  End Group"
    intID = intID + 1
    NEXT
    objMifFile.Writeline "End Component"
    objMifFile.Close
    strNoIDMifDir = objWshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _
       "SMS\Client\Configuration\Client Properties\NOIDMIF Directory")
    If intErr <> 1 Then
       If objFileSys.FileExists(strNoIDMifDir & strMifFile) Then _
           objFileSys.DeleteFile(strNoIDMifDir & strMifFile)
       If objFileSys.FileExists(strTempDir & strMifFile) Then _
           objFileSys.MoveFile strTempDir & strMifFile, _
           strNoIDMifDir & strMifFile
    End If
    Call Cleanup

    'Open File Function
    Private Function blnOpenFile(ByVal strFileName, ByRef objMifFile, ByVal intMode)
       blnOpenFile = False
       'Verify that a filename was passed
       If IsEmpty(strFileName) OR strFileName = "" Then
         blnOpenFile = False
         Exit Function
       End If
       'Verify objFileSys exists
       If Not IsObject(objFileSys) Then _
         Set objFileSys = CreateObject("Scripting.FileSystemObject")
       Err.Clear
       'Open the file for I/O
       Set objMifFile = objFileSys.OpenTextFile(strFileName, intMode, True)
       'Error check
       If blnErrorOccurred(" creating object reference to " & strFileName) Then
           blnOpenFile = False
           intErr = 1
           Exit Function
       End If
       blnOpenFile = True
    End Function
    'Error Occurred Function
    Private Function blnErrorOccurred (strIn)
       If Err <> 0 Then
           'Set intermediate variables
           lngMyErr = Err.Number
           strMyErrDesc = Err.Description
           Call WriteLine( " ")
           Call WriteLine( "Error 0x" & CStr(Hex(lngMyErr)) &  " occurred " & strIn)
           Call WriteLine( " ")
           'See if it's a WBEM error
           If blnWBEM_ErrorCheck(lngMyErr) Then
               Call WriteLine( "WBEM error description: " & vbCrLf & strWBEMErrDesc)
               Call WriteLine( " ")
           Else
               If Err.Description <> "" Then _
                   Call WriteLine( "Error description: " & vbCrLf & Err.Description)
                   Call WriteLine( " ")
           End If
           Err.Clear
           blnErrorOccurred = True
           intErr = 1
       Else
           blnErrorOccurred = False
       End If
    End Function
    'Cleanup Sub
    Sub Cleanup
       Set StdOut = Nothing
       Set objWshShell = Nothing
       Set objFileSys = Nothing
       Set objMifFile = Nothing
       Set objRegistry = Nothing
       Wscript.Quit(intErr)
    End Sub

     

     

    2 августа 2007 г. 7:32
    Отвечающий
  • вот нашел для пробы на http://www.myitforum.com/articles/8/view.asp?id=9735

    читать кто в локальных админах

     

    #pragma namespace ("\\\\.\\root\\cimv2")
    [union, ViewSources{"Select * from Win32_GroupUser where GroupComponent=\"Win32_Group.Domain='BUILTIN',Name='Administrators'\""},
    ViewSpaces{"\\\\.\\root\\CIMV2"}, Dynamic : ToInstance, provider("MS_VIEW_INSTANCE_PROVIDER")]

    class Win32_LocalAdmins
    {
    [PropertySources("PartComponent"), key] Win32_Account ref AccountName;
    [PropertySources("GroupComponent"), key] Win32_Group ref GroupName;
    };

    #pragma namespace ("\\\\.\\root\\cimv2\\sms")

    [ SMS_Report (TRUE),
    SMS_Group_Name ("LocalAdmins"),
    SMS_Class_ID ("MICROSOFT|LocalAdmins|1.0")]

    class Win32_LocalAdmins : SMS_Class_Template
    {
    [SMS_Report(TRUE), key]
    string AccountName;
    [SMS_Report(TRUE), key]
    string GroupName;
    };

     

    на клиенте следующее

    C:\...ngs\test\Рабочий стол\mof>mofcomp.exe local_admin1.mof
    32-разр. компилятор Microsoft (R) MOF, Версия 5.1.2600.2180
    (С) Корпорация Майкрософт, 1997-2001. Все права защищены.
    Разбор MOF-файла: local_admin1.mof
    MOF-файл успешно проверен на синтаксис
    Сохранение в базе данных...
    Произошла ошибка при создании  объекта 2, определенного в строках 17 - 23:
    0X80041002 Класс, вхождение, или свойство "SMS_Class_Template" не найдены.
    Компьютер вернул ошибку 0x80041001
    C:\...ngs\test\Рабочий стол\mof>

     

    если отдельно

    LocalAdmin компильться

     

    C:\...ngs\test\Рабочий стол\mof>mofcomp LocalAdmins.MOF
    32-разр. компилятор Microsoft (R) MOF, Версия 5.1.2600.2180
    (С) Корпорация Майкрософт, 1997-2001. Все права защищены.
    Разбор MOF-файла: LocalAdmins.MOF
    MOF-файл успешно проверен на синтаксис
    Сохранение в базе данных...
    Готово!

     

    report выдает ошибку

    C:\...ngs\test\Рабочий стол\mof>mofcomp LocalAdmins-Report.MOF
    32-разр. компилятор Microsoft (R) MOF, Версия 5.1.2600.2180
    (С) Корпорация Майкрософт, 1997-2001. Все права защищены.
    Разбор MOF-файла: LocalAdmins-Report.MOF
    MOF-файл успешно проверен на синтаксис
    Сохранение в базе данных...
    Произошла ошибка при создании  объекта 1, определенного в строках 7 - 13:
    0X80041002 Класс, вхождение, или свойство "SMS_Class_Template" не найдены.
    Компьютер вернул ошибку 0x80041001
    C:\...ngs\test\Рабочий стол\mof>

     

    в чем дело где ошибка??

    как правильно сделать тогда?

     

    Dmitry Burtsev

    достаточно ли заменить Administrators на Администраторы  в вашем VBS ??

    mif делает ... единственное не все собирает

     

    Администратор  - нашел

    main\Domain Admin - нашел

    1 - нашел (созданный для теста)

    main\HelpDesk   - не нашел

     

    с чем связано, что дописать??

    2 августа 2007 г. 12:09