|
|
<!--
****************************************************************** ' ' scrwinnt.wsf ' ' Purpose: test UMI WinNT functionality ' ' Parameters: none ' ' Returns: 0 - success ' 1 - failure ' '***************************************************************** -->
<job id="UMI WinNT Test"> <reference object="WbemScripting.SWbemLocator" version="1.2"/> <script language="VBScript">
on error resume next
set scriptHelper = CreateObject("WMIScriptHelper.WSC") scriptHelper.logFile = "c:\temp\umiwinnt.txt" scriptHelper.loggingLevel = 3 scriptHelper.testName = "UMI WinNT" scriptHelper.testStart
dim computerName computerName = "alanbos4"
if WScript.arguments.Count > 0 then computerName = WScript.Arguments (0)
TestBindings TestClasses TestAttributes TestSearch TestSecurity TestExtensions TestUsers TestGroups TestComputers
scriptHelper.testComplete
if scriptHelper.statusOK then WScript.Echo "PASS" WScript.Quit 0 else WScript.Echo "FAIL" WScript.Quit 1 end if
'**************************************************************** '* '* TestBindings '* ============ '* '* Test of moniker-based binding to objects and explicit '* locator connections with search preferences. '* '**************************************************************** Sub TestBindings () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing binding via monikers...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 ' Bind to namespace using UMI path set conn = GetObject("umi:///winnt/computer=" & computerName) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to bind to umi:///winnt/computer=" & computerName else scriptHelper.writeToLog "Succesful binding to umi:///winnt/computer=" & computerName, 2 end if
'Bind to single object using UMI path set user = GetObject("umi:///winnt/computer=" & computerName & "/user=guest") if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to bind to umi:///winnt/computer=" & computerName & "/user=guest" else scriptHelper.writeToLog "Successful binding to umi:///winnt/computer=" & computerName & "/user=guest", 2 end if
' Bind to single object using native path 'set user = GetObject("umiwinnt:///" & computerName & "/guest,User") 'if err <> 0 then ' scriptHelper.writeErrorToLog err, "Failed to bind to umiwinnt:///" & computerName & "/guest,User" 'else ' scriptHelper.writeToLog "Successful binding to umiwinnt:///" & computerName & "/guest,User", 2 'end if
' Bind using a umi server path
' Bind using a native server path
' Bind using connection properties ' set locator = CreateObject("WbemScripting.SWbemLocatorEx") ' set context = CreateObject("WbemScripting.SWbemNamedValueSet") ' context.Add End Sub
'**************************************************************** '* '* TestClasses '* =========== '* '* Test of class manipulation. '* '**************************************************************** Sub TestClasses ()
on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing classes...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2
' Bind to namespace using UMI path set conn = GetObject("umi:///winnt/computer=" & computerName) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to bind to umi:///winnt/computer=" & computerName else scriptHelper.writeToLog "Succesful binding to umi:///winnt/computer=" & computerName, 2 end if for each c in conn.SubclassesOf if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get class" else DisplayClass c DisplayInstances conn, c.Path_.Class end if next
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to enumerate classes"
End Sub
'**************************************************************** '* '* TestAttributes '* ============== '* '* Test of attribute manipulation. '* '****************************************************************
Sub TestAttributes () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing attributes...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 set conn = GetObject("umi:///winnt/computer=" & computerName) set user = conn.Get("user=guest") scriptHelper.writeToLog "Getting a user", 2
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get user" else scriptHelper.writeToLog "Succesfully retrieved user", 2 end if
' Attribute enumeration set props = user.Properties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get properties"
DisplayProperties props
' Single attribute retrieval by name value = user.Description
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get user.Description" else scriptHelper.writeToLog "User description is <" & value & ">", 2 end if
' System properties set props = user.SystemProperties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get system properties"
DisplayProperties props
' Attribute modification user.Description = user.Description & " foo" if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to set user.Description" user.Put_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to put user" else scriptHelper.writeToLog "User put successfuly", 2 end if
' Casting attributes to multivalues
' Object-valued attributes
' Multivalued attribute modification
' Refreshing the cache user.Refresh_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to refresh user" else scriptHelper.writeToLog "User refreshed successfuly: " & user.Description, 2 end if
' Refreshing specific items in the cache user.Description = "blah" user.FullName = "Zarniwoop" user.Refresh_ Array("Description", "PrimaryGroupID") if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to refresh specific user properties" else scriptHelper.writeToLog "Specific user properties refreshed successfuly: " & user.Description & " : " & user.FullName, 2 end if
' Property Count count = user.Properties_.Count if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to count properties" else scriptHelper.writeToLog "Number of properties is: " & count, 2 end if
' Schemaless attributes
' Parent traversal parent = user.Path_.Parent if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get parent" else scriptHelper.writeToLog "Parent is : " & parent, 2 end if
set parentObject = GetObject(parent) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to open parent" else scriptHelper.writeToLog "Parent opened OK", 2 end if
End Sub
'**************************************************************** '* '* TestSearch '* ========== '* '* Test of queries '* '****************************************************************
Sub TestSearch () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Search...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Search preferences
'Search result traversal End Sub
'**************************************************************** '* '* TestSecurity '* ============ '* '* Test of security '* '****************************************************************
Sub TestSecurity () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Security...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Get SD with flags
'Display ACLs and ACEs
'Change something
'Commit End Sub
'**************************************************************** '* '* TestExtensions '* ============== '* '* Test of extension interfaces '* '****************************************************************
Sub TestExtensions () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Extensions...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Late-bound property access
End Sub
'**************************************************************** '* '* TestUsers '* ========= '* '* Test of users '* '****************************************************************
Sub TestUsers () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Users...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Listing users on a computer
'Listing users in a domain
'Adding a user
'Setting a user password
'Setting user flags
'Moving a user
'Renaming a user
'Copying a user End Sub
'**************************************************************** '* '* TestGroups '* ========== '* '* Test of groups '* '****************************************************************
Sub TestGroups () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Groups...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Listing groups on a computer
'Listing groups in a domain
'Listing members of a group
'Adding a user to a group
'Removing a user from a group
End Sub
'**************************************************************** '* '* TestComputers '* ============= '* '* Test of computers '* '****************************************************************
Sub TestComputers () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Computers...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Listing computers in a domain
'Creating a computer account
'Deleting a computer account
End Sub
'**************************************************************** '* '* StrFromCIMType '* ============== '* '* Utility function to return string form of CIM type '* '****************************************************************
function StrFromCIMType (cimType) on error resume next StrFromCIMType = "?" Select Case cimType Case wbemCimtypeString StrFromCIMType = "String" Case wbemCimtypeIllegal StrFromCIMType = "Illegal" Case wbemCimtypeSint8 StrFromCIMType = "Sint8" Case wbemCimtypeUint8 StrFromCIMType = "Uint8" Case wbemCimtypeSint16 StrFromCIMType = "Sint16" Case wbemCimtypeUint16 StrFromCIMType = "Uint16" Case wbemCimtypeSint32 StrFromCIMType = "Sint32" Case wbemCimtypeUint32 StrFromCIMType = "Uint32" Case wbemCimtypeSint64 StrFromCIMType = "Sint64" Case wbemCimtypeUint64 StrFromCIMType = "Uint64" Case wbemCimtypeReal32 StrFromCIMType = "Real32" Case wbemCimtypeReal64 StrFromCIMType = "Real64" Case wbemCimtypeBoolean StrFromCIMType = "Boolean" Case wbemCimtypeDatetime StrFromCIMType = "Datetime" Case wbemCimtypeReference StrFromCIMType = "Reference" Case wbemCimtypeChar16 StrFromCIMType = "Cha16" Case wbemCimtypeObject StrFromCIMType = "Object" Case wbemCimtypeIUnknown StrFromCIMType = "IUnknown" End Select end function
Sub DisplayClass (c) on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "***************************", 2
className = c.Path_.Class if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get classname" else scriptHelper.writeToLog "Class:" & className, 2 end if superclassName = c.Derivation_(0) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get superclass" else scriptHelper.writeToLog "Superclass:" & superclassName, 2 end if ' Properties set props = c.Properties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get properties"
DisplayProperties props scriptHelper.writeToLog "***************************", 2 scriptHelper.writeToLog "", 2 End Sub
Sub DisplayInstance (i) on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "***************************", 2
path = i.SystemProperties_("__URL")
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get path" else scriptHelper.writeToLog "Path:" & className, 2 end if nativepath = i.SystemProperties_("__PATH")
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get native path" else scriptHelper.writeToLog "Native Path:" & nativepath, 2 end if ' Properties set props = i.Properties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get properties"
DisplayProperties props scriptHelper.writeToLog "***************************", 2 scriptHelper.writeToLog "", 2 End Sub
Sub DisplayProperties (props) on error resume next
for each p in props if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get property" else dim value
if p.IsArray then value = "{" v = p.Value for i = LBound(v) to UBound(v) if IsObject(v(i)) then value = value & "<object>" else value = value & v(i) end if
if i <> UBound(v) then value = value & "," next
value = value & "}" else value = p.Value end if scriptHelper.writeToLog " " & p.Name & "[" & StrFromCIMType(p.CIMType) & "]: " & value, 2 end if next
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to enumerate properties" End Sub
'**************************************************************** '* '* DisplayInstances '* ================ '* '* Enumerate and display instances '* '**************************************************************** Sub DisplayInstances (conn,className)
on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing instances...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2
for each i in conn.InstancesOf (className) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get instance" else DisplayInstance i end if next
if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to enumerate instances"
End Sub
</script> </job>
|