Microsoft.SystemCenter.VirtualMachineManager.VMHostPowerStateCollections (Rule)

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.Discovery.VMMManagementServer
CategoryPerformanceCollection
EnabledTrue
Alert GenerateFalse
RemotableTrue

Member Modules:

ID Module Type TypeId RunAs 
PerformanceDS DataSource Microsoft.SystemCenter.VirtualMachineManager.Report.TimedPowerShell.PerformanceProvider Default
WriteToDW WriteAction Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData Default

Source Code:

<Rule ID="Microsoft.SystemCenter.VirtualMachineManager.VMHostPowerStateCollections" Enabled="true" Target="VMMDiscovery!Microsoft.SystemCenter.VirtualMachineManager.Discovery.VMMManagementServer">
<Category>PerformanceCollection</Category>
<DataSources>
<DataSource ID="PerformanceDS" TypeID="Microsoft.SystemCenter.VirtualMachineManager.Report.TimedPowerShell.PerformanceProvider">
<IntervalSeconds>900</IntervalSeconds>
<ScriptName>GetVMHostPowerState</ScriptName>
<ScriptBody><Script>param($VMMServer, $domain, $username, $pass)


function Cleanup
{
param($vmm)

if ($vmm -ne $null)
{
$vmm.Disconnect();
$vmm = $null;
}

$module = get-module -name "virtualmachinemanagercore"

if ($module -ne $null)
{
remove-module -moduleInfo $module;
$module = $null;
}


}

$vmm = $null;
Try
{

$oAPI = New-Object -comObject 'MOM.ScriptAPI'

$evt = New-Object System.Diagnostics.Eventlog("Application");
$evt.Source = "Microsoft.SystemCenter.VirtualMachineManager.Report.VMHostPowerStateCollections";
$errevent = [System.Diagnostics.EventLogEntryType]::Error;


$error.Clear();

$cred = $null;
if ($domain -AND $username -AND $pass)
{
#Append domain to get domain\username
$domainUser = $domain + "\" + $username;

#Create Cred object
$securePass = ConvertTo-SecureString -AsPlainText $pass -force
$cred = New-Object System.Management.Automation.PSCredential $domainUser, $securePass;
}

$module = get-module -name "virtualmachinemanagercore"
if ($module -eq $null)
{
$modulePath = get-itemproperty -path "HKLM:\Software\Microsoft\Microsoft System Center Virtual Machine Manager Administrator Console\Setup";
Import-Module ($modulePath.InstallPath + "bin\psModules\virtualmachinemanagercore\virtualmachinemanagercore.psd1");
}

if ($cred -eq $null)
{
$evt.WriteEntry("Credentials are null for user: " + $domainUser, $errevent, 25938);
return;
}


$vmm = Get-SCVMMServer $VMMServer -Credential $cred;
$VMHosts = Get-SCVMHost -VMMServer $vmm ;
if ($error.Count -ne 0)
{
$evt.WriteEntry($error, $errevent, 25936);
return;
}
else
{
if ($VMHosts -ne $null)
{
if ( $VMHosts.Count -ne $null)
{
foreach ($vmhost in $VMHosts)
{
$pBag = $oAPI.CreatePropertyBag()

$pBag.AddValue('HostName', $vmhost.Name);

if ($vmhost.OverallState -eq 'Stopped')
{
# 0 means Power Off
$pBag.AddValue('PowerState', 0)
}
else
{
# 1 means Power On
$pBag.AddValue('PowerState', 1)
}
$pBag
}
}
else
{
$pBag = $oAPI.CreatePropertyBag()

$pBag.AddValue('HostName', $VMHosts.Name);
if ($VMHosts.OverallState -eq 'Stopped')
{
# 0 means Power Off
$pBag.AddValue('PowerState', 0)
}
else
{
# 1 means Power On
$pBag.AddValue('PowerState', 1)
}
$pBag
}
}
}
}
Finally
{
Cleanup -vmm $vmm
}</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>VMMServer</Name>
<Value>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</Value>
</Parameter>
<Parameter>
<Name>domain</Name>
<Value>$RunAs[Name="PROV2Library!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMServerConnectionRunAsProfile"]/Domain$</Value>
</Parameter>
<Parameter>
<Name>username</Name>
<Value>$RunAs[Name="PROV2Library!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMServerConnectionRunAsProfile"]/UserName$</Value>
</Parameter>
<Parameter>
<Name>pass</Name>
<Value>$RunAs[Name="PROV2Library!Microsoft.SystemCenter.VirtualMachineManager.2012.VMMServerConnectionRunAsProfile"]/Password$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>870</TimeoutSeconds>
<ObjectName>VMHost</ObjectName>
<CounterName>PowerState</CounterName>
<InstanceName>$Data/Property[@Name='HostName']$</InstanceName>
<Value>$Data/Property[@Name='PowerState']$</Value>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteToDW" TypeID="SCDW!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData"/>
</WriteActions>
</Rule>