Scripted Resource Example
The following examples show simple control scripts.
| Example | Purpose |
|---|---|
|
Using Private Properties |
Illustrates how private properties are used. |
|
Revealing Node Properties |
Demonstrates how to reveal node properties, in this case the node's local time zone. |
VBScript Example - Using Private Properties
This example illustrates the use of private properties. When brought online (see the Online function), the script logs a prompt if the private properties ShareName or SharePath do not exist. A console operator can set values for these properties using the /priv command line switch.
This is an example of cluster log output when the private properties are set successfully:
00000934.00000b14::... [API] Creating resource Generic Script <FileShareGenScript>(... ...) ... ... 00000604.00000448::... : Loaded script engine 'VBScript' successfully. 00000604.00000448::... : Script-wide code begins execution 00000604.00000448::... : Loaded script 'e:\truesample.vbs' successfully. ... ... 00000934.00000844::... Setting value of ShareName for key Resources\... ...\Parameters to ... ... 00000934.00000844::... Setting value of SharePath for key Resources\... ...\Parameters to ... ... 00000604.00000448::... : Unloaded script engine 'VBScript' successfully.
The following is the sample script.
'Script-Level Global Variables Resource.LogInformation("Script-wide code begins execution") Dim WshShell, oExec, oLooksAlive, oIsAlive, oWait Set WshShell = CreateObject("WScript.Shell") Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Function Online( ) ' ... Create a network share... Resource.LogInformation "Entering Online" ' ... Prompt console operator for a sharename if none provided... If Resource.Sharename = "" Then Resource.LogInformation "You need to set the sharename private property before attempting to go online" ' ... No-zero return code will appear in console log... Online = 1 Exit Function End If ' ... Prompt console operator for a sharepath if none provided... If Resource.SharePath = "" Then Resource.LogInformation "You need to set the SharePath private property before attempting to go online" Online = 1 Exit Function End If Set oExec = WshShell.Exec("net share """ & Resource.ShareName & """=""" & Resource.SharePath & """") ' ... Allow time for operation to complete... Do While oExec.Status = 0 Set oWait = WshShell.Exec("sleep 1") Loop If oExec.ExitCode <> 0 Then Resource.LogInformation "net share """ & Resource.ShareName & """=""" & Resource.SharePath & """ command failed" Resource.LogInformation oExec.StdErr.ReadAll End If Online = oExec.ExitCode End Function Function Offline( ) Resource.LogInformation "Entering Offline" Set oExec = WshShell.Exec("net share """ & Resource.ShareName & """ /delete") Do While oExec.Status = 0 Set oWait = WshShell.Exec("sleep 1") Loop If oExec.ExitCode <> 0 Then Resource.LogInformation "Failed to disconnect the resource to an offline status gracefully" Resource.LogInformation oExec.StdErr.ReadAll End If Offline = oExec.ExitCode End Function Function LooksAlive( ) Resource.LogInformation "Entering LooksAlive" Set oLooksAlive = WshShell.Exec("net share """ & Resource.ShareName & """") Do While oLooksAlive.Status = 0 Set oWait = WshShell.Exec("sleep 1") Loop If oLooksAlive.ExitCode <> 0 Then Resource.LogInformation "net share """ & Resource.ShareName & """ command is failing with" Resource.LogInformation oLooksAlive.StdErr.ReadAll End If LooksAlive = oLooksAlive.ExitCode End Function Function IsAlive( ) Resource.LogInformation "Entering IsAlive" Set oIsAlive = WshShell.Exec("net share """ & Resource.ShareName & """") Do While oIsAlive.Status = 0 Set oWait = WshShell.Exec("sleep 1") Loop If oIsAlive.ExitCode <> 0 Then Resource.LogInformation "net share """ & Resource.ShareName & """ command is failing with" Resource.LogInformation oIsAlive.StdErr.ReadAll End If If (fso.FolderExists(Resource.SharePath) = False) Then Resource.LogInformation "folder " & Resource.SharePath & " no longer exists" IsAlive = 1 Exit Function End If IsAlive = oIsAlive.ExitCode End Function Function Open( ) If Resource.PropertyExists("ShareName") = False Then Resource.AddProperty("ShareName") End If If Resource.PropertyExists("SharePath") = False Then Resource.AddProperty("SharePath") End If Open = 0 End Function Function Close( ) Close = 0 End Function Function Terminate( ) Resource.LogInformation "Entering Terminate" Set oExec = WshShell.Exec("net share """ & Resource.ShareName & """ /delete") Do While oExec.Status = 0 Set oWait = WshShell.Exec("sleep 1") Loop If oExec.ExitCode <> 0 Then Resource.LogInformation oExec.StdErr.ReadAll End If Terminate = oExec.ExitCode End Function
VBScript Example - Revealing Node Properties
This VBScript example illustrates the use of WMI to reveal a node property, in this case the node's local time zone. The code, in the Online function, is executed once when the script resource is brought online. The required script entry points LooksAlive and IsAlive are empty functions in this example.
Note that the scripted resource does not reveal desktop objects, so attempts to write to the console using WMI will fail. The Resource object must be used instead.
This is an example of console log output when the script executes:
00000604.000006dc::... Loaded script engine 'VBScript' successfully. 00000604.000006dc::... Loaded script 'e:\wmitime.vbs' successfully. 00000604.000006dc::... Local Time Zone is: (GMT-08:00) Pacific Time (US & Canada): Tijuana ... ...
The following is the sample script.
Function Online( ) ' ' Application VBScript uses WMI to reveal the node's local time zone description ' On Error Resume Next ' ' For the local computer only... ' strComputer = "." ' ' ... query the property... ' Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_TimeZone",,48) ' ' ... and output the local time zone to the log ' For Each objItem in colItems Resource.LogInformation "Local Time Zone is: " & objItem.Description Next ' ... Return success Online = true End Function Function LooksAlive( ) LooksAlive = true End Function Function IsAlive( ) IsAlive = true End Function
Send comments about this topic to Microsoft
Build date: 11/28/2012