Individua il cluster RRAS multi-tenant

Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.Discovery.MultiTenantClusterRRASServer (Discovery)

Individua il server RRAS multi-tenant nel server Windows virtuale

Element properties:

TargetMicrosoft.Windows.Cluster.VirtualServer
EnabledTrue
Frequency21600
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
PSMultiTenantRRASServerDiscovery DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Default

Source Code:

<Discovery ID="Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.Discovery.MultiTenantClusterRRASServer" Target="MWCL!Microsoft.Windows.Cluster.VirtualServer" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer">
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer" PropertyID="ServerName"/>
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer" PropertyID="Tenants"/>
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer" PropertyID="StandByServer"/>
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer" PropertyID="Capacity"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.MultiTenantRRASService">
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.MultiTenantRRASService" PropertyID="ServerName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.StandByRRASServerWatcher">
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.StandByRRASServerWatcher" PropertyID="ServerName"/>
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.StandByRRASServerWatcher" PropertyID="StandByServerName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServerWatcher">
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServerWatcher" PropertyID="ServerName"/>
<Property TypeID="Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServerWatcher" PropertyID="Tenants"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="Windows!Microsoft.Windows.ComputerHostsComputerRole"/>
<DiscoveryRelationship TypeID="Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.MultiTenantRRASService.Contains.RemoteAccessServerWatcher"/>
<DiscoveryRelationship TypeID="Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.MultiTenantRRASService.Contains.StandByRRASServerWatcher"/>
<DiscoveryRelationship TypeID="Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.RemoteAccessServerWatcher.Refers.RemoteAccess"/>
</DiscoveryTypes>
<DataSource ID="PSMultiTenantRRASServerDiscovery" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>21600</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverMutliTenantRRASAndBackupServer.ps1</ScriptName>
<ScriptBody><Script>
param($sourceId,$managedEntityId,$computerName,$GroupName)

# Setting Eventing for debugging purpose
$EventLog = new-object System.Diagnostics.EventLog('Application')
$EventLog.MachineName = "."
$EventLog.Source = "MultiTenantRRASClusterDiscovery"

$api = new-object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

$ab = [Security.Principal.WindowsIdentity]::GetCurrent()

function GetTenantNames
{
param($routingDomains)

$tenantNames = (@($routingDomains).RoutingDomain) -join ","

return $tenantNames
}

$ClusterService = "ClusSvc"
$RunningStatus = "Running"
$ERROR_SUCCESS = 0
$ERROR_FAILURE = 1
$RasClusterResource = "RAS Cluster Resource"
$OnlineState = "Online"

function FuncCheckService{
param($ServiceName)
$service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
if($service.Status -ne $RunningStatus)
{

return $ERROR_FAILURE
}
else
{
return $ERROR_SUCCESS
}
}

function CheckClusterResource{
param($ResourceType)
$isAvailable = Get-ClusterResource -ErrorAction SilentlyContinue | where ResourceType -EQ "RAS Cluster Resource"
if($isAvailable)
{
return $ERROR_SUCCESS
}
else
{
return $ERROR_FAILURE
}
}

function GetActiveNode{
param($ResourceType)
$resource = Get-ClusterResource -ErrorAction SilentlyContinue | where ResourceType -EQ $ResourceType
if($resource)
{
return $resource.OwnerNode
}
}

function GetpassiveNodes{
param($ResourceType)
$clusterNode = Get-ClusterNode
$passiveNodes = @()

$activeNode = GetActiveNode -ResourceType $RasClusterResource
foreach($item in $clusterNode)
{
if($item.Name -ne $activeNode.Name)
{
$passiveNodes += $item
}
}
return $passiveNodes;
}

try{
$errorCode = FuncCheckService -ServiceName $ClusterService
if($errorCode -eq $ERROR_SUCCESS)
{
$virtualServer = Get-ClusterGroup $GroupName | Get-ClusterResource | where ResourceType -EQ $RasClusterResource | where State -EQ $OnlineState
if( $virtualServer -ne $null)
{
$RrasRole = Get-WindowsFeature "RemoteAccess"
$RrasMgmtPsTools = Get-WindowsFeature "RSAT-RemoteAccess-PowerShell"
if( ($RrasRole.Installed -eq $true) -AND ($RrasMgmtPsTools.Installed -eq $true))
{
$myRRAS = get-remoteaccess
$activeNodeName = $null
if ( $myRRAS.VpnMultiTenancyStatus -eq "Installed" )
{

$passiveNodes = $null
#Creating service node to show both active and passive nodes in a cluster
$haServer = $discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.MultiTenantRRASService']$")
$haServer.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "RRAS Cluster Service (" + $computerName + ")")
$haServer.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.MultiTenantRRASService']/ServerName$", $computerName)

$discoveryData.AddInstance($haServer)


$remoteAccessServerWatcher = $discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServerWatcher']$")
$remoteAccessServerWatcher.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "RemoteAccess Server Watcher (" + $computerName + ")")
$remoteAccessServerWatcher.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServerWatcher']/ServerName$", $computerName)
$discoveryData.AddInstance($remoteAccessServerWatcher)

$rel_haServer_raWatcher = $discoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.MultiTenantRRASService.Contains.RemoteAccessServerWatcher']$")
$rel_haServer_raWatcher.Source = $haServer
$rel_haServer_raWatcher.Target = $remoteAccessServerWatcher
$discoveryData.AddInstance($rel_haServer_raWatcher)

#On a cluster's virtual server. Create the Multitenant RRAS Server object
$raServer = $discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer']$")
$raServer.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$raServer.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "RRAS (" + $computerName + ")")
$raServer.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer']/ServerName$", $computerName)

$standByServerName = $null
$passiveNodes = GetpassiveNodes -ResourceType $RasClusterResource

if($passiveNodes -ne $null)
{
$standByServerName = @($passiveNodes)[0].Name
$standByServerName = $standByServerName + "." + (Get-WmiObject Win32_ComputerSystem).Domain
}

$raServer.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer']/StandByServer$", $standByServerName)
$raServer.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer']/Capacity$", $myRRAS.CapacityKbps)

$routingDomains = @(get-remoteaccessroutingdomain)
if($routingDomains.Count -gt 0)
{
$tenantNames = GetTenantNames -routingDomains $routingDomains
$raServer.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServer']/Tenants$", $tenantNames)
$remoteAccessServerWatcher.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.RemoteAccessServerWatcher']/Tenants$", $tenantNames)
}

$discoveryData.AddInstance($raServer)

$rel_raServerWatcher_remoteAccess = $discoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.RemoteAccessServerWatcher.Refers.RemoteAccess']$")
$rel_raServerWatcher_remoteAccess.Source = $remoteAccessServerWatcher
$rel_raServerWatcher_remoteAccess.Target = $raServer
$discoveryData.AddInstance($rel_raServerWatcher_remoteAccess)

#Create backup server node if required
if($standByServerName -ne $null)
{
$standByServerWatcher = $discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.StandByRRASServerWatcher']$")
$standByServerWatcher.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "StandBy RRAS Server Watcher ")
$standByServerWatcher.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.StandByRRASServerWatcher']/ServerName$", $computerName)
$standByServerWatcher.AddProperty("$MPElement[Name='Microsoft.Windows.RemoteAccess.Multitenant.2012.R2.Class.StandByRRASServerWatcher']/StandByServerName$", $standByServerName)
$discoveryData.AddInstance($standByServerWatcher)

$rel_haServer_backupWatcher = $discoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.RemoteAccess.MultiTenant.2012.R2.MultiTenantRRASService.Contains.StandByRRASServerWatcher']$")
$rel_haServer_backupWatcher.Source = $haServer
$rel_haServer_backupWatcher.Target = $standByServerWatcher
$discoveryData.AddInstance($rel_haServer_backupWatcher)
}
}
}
}
}
}
catch{
$EventLog.WriteEntry("[MultiTenantRRASClusterDiscovery] Error occured while running Discovery at (" + $computerName + ")" )
$EventLog.WriteEntry("[MultiTenantRRASClusterDiscovery] Error Data: " + $_)
}


$discoveryData</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>computerName</Name>
<Value>$Target/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>GroupName</Name>
<Value>$Target/Property[Type="MWCL!Microsoft.Windows.Cluster.VirtualServer"]/GroupName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>900</TimeoutSeconds>
</DataSource>
</Discovery>