Provedor de Descoberta de Serviços Compartilhados do SharePoint

Microsoft.SharePoint.2013.SPSharedService.DiscoveryProvider (DataSourceModuleType)

É o provedor de descoberta para o preenchimento de instâncias de serviço compartilhado do SharePoint em execução em servidores SharePoint.

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsMicrosoft.SharePoint.AdminAccount
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.SharePoint.2013.CommandExecuterDiscoveryDataSource Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$IntervaloEmSegundosIntervaloEmSegundos Propriedade do Provedor de Descoberta no ServiçoCompartilhadoSP. A frequência, em segundos, em que a Descoberta será executada, deve ter a duração suficiente para impedir a falha de Descoberta causada pela concorrência de recursos.
SyncTimestring$Config/SyncTime$TempoSincA propriedade TempoSinc (hora de início) de ProvedordeDescoberta em ServiçoCompartilhadoSP. TempoSinc é um valor de cadeia de caracteres no formato "HH:mm". A hora de TempoSinc, IntervaloEmSegundos e importação do Pacote de Gerenciamento juntos determinam a hora de execução exata de um determinado fluxo de trabalho. Por exemplo, se IntervaloEmSegundos = 21600 (6 horas) e TempoSinc = "01:15", a hora de execução possível do fluxo de trabalho é 1:15, 7:15, 1:15, 7:15; caso o Pacote de Gerenciamento seja importado após 1:15 mas antes de 7:15, ele começará às 7:15, se o Pacote de Gerenciamento for importado depois de 1:15, mas antes de 7:15, ele começará às 7:15. No entanto, devido a outros fatores, como atraso de rede, a hora de início real ainda poderá variar.
TimeoutSecondsint$Config/TimeoutSeconds$TempoLimiteemSegundosTempoLimiteemSegundos Propriedade do Provedor de Descoberta no ServiçoCompartilhadoSP. O valor Timeout deve ter a duração suficiente para encerrar a Descoberta necessária dos objetos, e deve ser menor do que IntervaloEmSegundos.
DebugTracebool$Config/DebugTrace$RastreamentodeDepuraçãoPropriedade RastreamentodeDepuração do Provedor de Descoberta em ServiçoCompartilhadoSP. O módulo Descoberta gravará o controle de depuração no Log de Eventos do Windows caso esse valor seja definido como verdadeiro.

Source Code:

<DataSourceModuleType ID="Microsoft.SharePoint.2013.SPSharedService.DiscoveryProvider" Accessibility="Internal" RunAs="WSS!Microsoft.SharePoint.AdminAccount">
<Configuration>
<xsd:element name="ComputerName" type="xsd:string"/>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="SyncTime" type="xsd:string"/>
<xsd:element name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element name="DebugTrace" type="xsd:boolean"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="DebugTrace" Selector="$Config/DebugTrace$" ParameterType="bool"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Microsoft.SharePoint.2013.CommandExecuterDiscoveryDataSource">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ApplicationName/>
<WorkingDirectory/>
<CommandLine>powershell.exe -NoLogo -NoProfile -Noninteractive "$ep = get-executionpolicy; if ($ep -gt 'RemoteSigned') {set-executionpolicy remotesigned} &amp; '$file/WSSSharedServiceDiscovery.ps1$' '$MPElement$' '$Target/Id$' '$Config/ComputerName$' '$Config/DebugTrace$'"</CommandLine>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<RequireOutput>true</RequireOutput>
<Files>
<File>
<Name>WSSStrings.ps1</Name>
<Contents><Script>$global:EventLog_Fail_Create_Discovery_Package = "Failed to create Discovery transmission package.";
$global:EventLog_Fail_Return_Discovery_Package = "Failed to return Discovery transmission package.";
$global:EventLog_Fail_Create_Discovery_ScriptAPI = "Failed to initiate MOM.ScriptAPI object.";
$global:EventLog_Fail_Create_Class = "Failed to create {0} class instance.";
$global:EventLog_Fail_Create_Relationship = "Failed to create {0} relationship instance.";
$global:EventLog_Fail_LoadBalancer_Operation = "Addresses for this application may not have been fetched yet.";

$global:EventLog_Exit_On_NonExist = "This machine does not have SharePoint installed."
$global:EventLog_Fail_On_Error = "{0} Discovery/Monitoring script continues under this error! ";
$global:EventLog_Exit_On_Error = "{0} Discovery/Monitoring script was terminated! ";

$global:EventLog_Format = @"
Current User: {0}
Current PID: {1}
InvocationInfo.MyCommand: {2}
InvocationInfo.ScriptLineNumber: {3}
InvocationInfo.OffsetInLine: {4}
InvocationInfo.ScriptName: {5}
InvocationInfo.Line: {6}
InvocationInfo.PositionMessage: {7}
InvocationInfo.InvocationName: {8}
InvocationInfo.PipelineLength: {9}
InvocationInfo.PipelinePosition: {10}
"@;

$global:EventLog_Template = "[{0} in Discovery/Monitoring script] {1} {2}";

$global:EventLog_Debug_StartedArgs = "[Debug] {0} Started. Args[]={1}, {2}, {3}, {4}.";
$global:EventLog_Debug_MajorServer = "[Debug] This is the major server detected by {0}.";

$global:EventLog_Fail_Identify_Farm = "Cannot identify which SharePoint farm this server is associated with. Check the management pack guide for troubleshooting information.";
$global:EventLog_Fail_Retrieve_Farm_And_Local = "Failed on retrieving information for SharePoint farm and Sharepoint local machine. Check the management pack guide for troubleshooting information.";
$global:EventLog_Fail_Retrieve_OM_Value = "Failed on retrieving values from SharePoint object model.";
$global:EventLog_Fail_Retrieve_Service = "Failed on retrieving {0} service from SharePoint farm {1}.";
$global:EventLog_Fail_Retrieve_Object = "Failed to find {0} in SharePoint object model.";

$global:DisplayName_ServerGroup = "Server Group";
$global:DisplayName_ServiceGroup = "Service Group";
$global:DisplayName_WebApplicationGroup = "Web Application Group";
$global:DisplayName_SharedServiceGroup = "Shared Service Group";
$global:DisplayName_SharedProxyGroup = "Shared Service Proxy Group";
$global:DisplayName_ProxyClient = "Proxy Client ({0})";
$global:DisplayName_TimerJobs = "Timer Jobs";
$global:DisplayName_HostCollection = "Host Collection";
$global:DisplayName_DatabaseCollection = "Database Collection";

$global:DisplayName_SPTrace = "SPTraceV4";
$global:DisplayName_WindowsTracingService = "SharePoint Tracing Service";
$global:DisplayName_AdminWord = " - Admin";
</Script></Contents>
</File>
<File>
<Name>WSSDiscoveryLibrary.ps1</Name>
<Contents><Script>$error.Clear();
$ErrorActionPreference = "SilentlyContinue";

$global:EventObject = New-Object Diagnostics.EventLog
$global:EventObject.Source = "Operations Manager"

function global:Write-Event ([string] $LogContent, $LogType = [Diagnostics.EventLogEntryType]::Information)
{
if ($error)
{
$error.Clear()
$LogType = [Diagnostics.EventLogEntryType]::Error
}

$EventObject.WriteEntry($LogContent, $LogType)
}

function global:LogScriptTime($InvocationObj)
{
$dtEnd = [DateTime]::Now

$msg = @"
[Debug] {0} ended.
Current User: {1}
Current PID: {2}
start time: {3}
stop time: {4}
time taken: {5}
"@ -f $InvocationObj.MyCommand,
[Environment]::UserName,
$pid,
$dtStart,
$dtEnd,
(New-TimeSpan $dtStart $dtEnd).TotalMilliseconds

Write-Event $msg
}

.\WSSStrings.ps1

$global:Arguments = $Args;

$global:Farm = $null;
$global:LocalServer = $null;
$global:DiscData = $null;
$global:Port = "_port";
$global:Http = "_http";

function global:Get-Farm()
{
if ($global:Farm -eq $null)
{

$global:Farm = [Microsoft.SharePoint.Administration.SPFarm]::Local;
}
}

function global:Get-LocalServer()
{
if ($global:LocalServer -eq $null)
{

$global:LocalServer = [Microsoft.SharePoint.Administration.SPServer]::Local;
}
}

function global:Get-ServiceProxy([string] $ClassType)
{
Get-Farm;
foreach ($ServiceProxy in $global:Farm.ServiceProxies)
{
if ($ClassType.ToLower() -eq $ServiceProxy.GetType().FullName.ToLower())
{
return $ServiceProxy;
}
}
return $null;
}

function global:Get-Service([string] $ClassType)
{
Get-Farm;
foreach ($Service in $global:Farm.Services)
{
if ($ClassType.ToLower() -eq $Service.GetType().FullName.ToLower())
{
return $Service;
}
}
return $null;
}

function global:Get-ServiceEx([string] $ClassType, [string] $Name)
{
Get-Farm;
foreach ($Service in $global:Farm.Services)
{
if ($ClassType.ToLower() -eq $ServiceInstance.GetType().FullName.ToLower())
{
if ($Name.ToLower() -eq $ServiceInstance.Name.ToLower())
{
return $ServiceInstance;
}
}
}
return $null;
}

function global:Get-ServiceInstance([string] $ClassType)
{
Get-LocalServer;

if (! $ClassType.EndsWith("Instance"))
{
$ClassType += "Instance";
}

foreach ($ServiceInstance in $global:LocalServer.ServiceInstances)
{
if ($ClassType.ToLower() -eq $ServiceInstance.GetType().FullName.ToLower())
{
return $ServiceInstance;
}
}
return $null;
}

function global:Get-ServiceInstanceEx([string] $ClassType, [string] $Name)
{
Get-LocalServer;

if (! $ClassType.EndsWith("Instance"))
{
$ClassType += "Instance";
}

foreach ($ServiceInstance in $global:LocalServer.ServiceInstances)
{
if ($ClassType.ToLower() -eq $ServiceInstance.GetType().FullName.ToLower())
{
if ($Name.ToLower() -eq $ServiceInstance.Name.ToLower())
{
return $ServiceInstance;
}
}
}
return $null;
}

function global:Create-DiscoveryData()
{
if ($global:DiscData -eq $null)
{
$global:DiscData = $global:MomScriptAPIObject.CreateDiscoveryData(0, $global:Arguments[0], $global:Arguments[1]);
Handle-Errors($global:EventLog_Fail_Create_Discovery_Package, $true, $false);

$global:HealthSvc = $global:DiscData.CreateClassInstance("$MPElement[Name='SC!Microsoft.SystemCenter.HealthService']$");
$global:HealthSvc.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $global:ComputerName);
Handle-Errors($global:EventLog_Fail_Create_Class -f "Microsoft.SystemCenter.HealthService");
}
return $global:DiscData;
}

function global:Deliver-DiscoveryData([Object] $DiscData)
{
$global:MomScriptAPIObject.Return($DiscData);
Handle-Errors($global:EventLog_Fail_Return_Discovery_Package, $true, $false);
$DiscData = $null;
}

function global:IsMainServer([System.Boolean] $UseLastServer)
{
$Servers = $global:Farm.Servers;

if ($UseLastServer)
{
$Count = $Servers.Count;
$ServerArray = new-object string[][] $Count,2;
$Index = 0;

foreach ($Server in $Servers)
{
$ServerArray[$Index][0] = $Server.Name;
$ServerArray[$Index++][1] = $Server.Role.ToString();
}

for ($Index--; $Index -ge 0; $Index--)
{

if ($ServerArray[$Index][1] -ne "Invalid")
{
return ($ServerArray[$Index][0] -eq $global:LocalServer.Name);
}
}
}
else
{
foreach ($Server in $Servers)
{

if ($Server.Role -ne "Invalid")
{
return ($Server.Name -eq $global:LocalServer.Name);
}
}
}

return $false;
}

function global:Release-Resources()
{
$global:HashData = $null;
$global:DiscData = $null;
$global:HealthSvc = $null;
$global:MomScriptAPIObject = $null;

$global:WSSAssembly = $null;

$global:EventObject = $null;
$global:EventAssembly = $null;
}

function global:Handle-Errors([System.Object] $Arguments)
{
if (! $error)
{
return;
}

$ErrMsg = "";
$IsExit = $true;
$IsReturn = $true;
$IsLog = $true;

if ("System.String" -eq $Arguments.GetType().FullName)
{
$ErrMsg = $Arguments;
}
else
{
$ErrMsg = $Arguments[0];
$IsExit = $Arguments[1];
if ($Arguments.Count -gt 2)
{
$IsReturn = $Arguments[2];
}
if ("" -eq $ErrMsg)
{
$IsLog = $false;
}
}

if ($IsLog.Equals($true))
{
$ErrorString = "";
if ($IsExit.Equals($false))
{
$ErrorString = $global:EventLog_Fail_On_Error -f $ErrMsg;
}
else
{
$ErrorString = $global:EventLog_Exit_On_Error -f $ErrMsg;
}

$Exception = $error[$error.Count - 1];
if ($Exception.InvocationInfo -ne $null)
{
$ErrorString += ($global:EventLog_Format -f [Environment]::UserName, $pid, $Exception.InvocationInfo.MyCommand,
$Exception.InvocationInfo.ScriptLineNumber, $Exception.InvocationInfo.OffsetInLine, $Exception.InvocationInfo.ScriptName,
$Exception.InvocationInfo.Line, $Exception.InvocationInfo.PositionMessage, $Exception.InvocationInfo.InvocationName,
$Exception.InvocationInfo.PipelineLength, $Exception.InvocationInfo.PipelinePosition);
}

if ($null -ne $Exception.Exception)
{
$Exception = $Exception.Exception;
}
$InnerException = $Exception;
if ($null -ne $Exception.InnerException)
{
$InnerException = $Exception.InnerException;
}

$global:EventObject.WriteEntry(($global:EventLog_Template -f $InnerException.GetType().FullName, $ErrorString, $Exception.Message), [System.Diagnostics.EventLogEntryType]::Error);
}

if ($IsExit.Equals($true))
{
if ($IsReturn.Equals($true))
{
Deliver-DiscoveryData($global:DiscData);
}
Release-Resources;
break;
}

$error.Clear();
}

function global:GetDebugSetting($DebugTrace)
{

if ($DebugTrace.ToUpper() -eq "TRUE")
{
$global:Debug = $True;
}
else
{
$global:Debug = $False;
}

}

$global:MomScriptAPIObject = new-object -comObject "MOM.ScriptAPI";
Handle-Errors($global:EventLog_Fail_Create_Discovery_ScriptAPI, $true, $false);

$global:WSSAssembly = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint");
if ($null -eq $global:WSSAssembly)
{
throw $global:EventLog_Exit_On_NonExist;
}
Handle-Errors("", $true, $false);

if ($WSSAssembly.GetName().Version.Major -ne 15)
{
Release-Resources;
break;
}

$global:WSSConfig = "Microsoft.SharePoint.Administration.SPConfigurationDatabase";
$global:WSSAdmin = "Microsoft.SharePoint.Administration.SPWebService";
$global:SPAdmin = "Microsoft.SharePoint.Administration.SPAdministrationService";
$global:SPSearch = "Microsoft.SharePoint.Search.Administration.SPSearchService";
$global:SPIncomingMail = "Microsoft.SharePoint.Administration.SPIncomingEmailService";
$global:SPHelpSearch = "Microsoft.SharePoint.Search.Administration.SPSearchService";
$global:SPTimer = "Microsoft.SharePoint.Administration.SPTimerService";
$global:SPWebApp = "Microsoft.SharePoint.Administration.SPWebService";
$global:SPUserCode = "Microsoft.SharePoint.Administration.SPUserCodeService";
$global:SPDatabase = "Microsoft.SharePoint.Administration.SPDatabaseService";

$global:SPTopology = "Microsoft.SharePoint.SPTopologyWebService";
$global:SPUsage = "Microsoft.SharePoint.Administration.SPUsageService";
$global:SPBDC = "Microsoft.SharePoint.BusinessData.SharedService.BdcService";
$global:SPSecurityToken = "Microsoft.SharePoint.Administration.Claims.SPSecurityTokenService";

</Script></Contents>
</File>
<File>
<Name>WSSSharedServiceDiscovery.ps1</Name>
<Contents><Script>.\WSSDiscoveryLibrary.ps1 $Args[0] $Args[1]

GetDebugSetting $Args[3]

if ($global:Debug) { $global:dtStart = [DateTime]::Now }
if ($global:Debug) { Write-Event($global:EventLog_Debug_StartedArgs -f $MyInvocation.MyCommand, $Args[0], $Args[1], $Args[2], $Args[3]) }

.\WSSSharedServiceTopology.ps1
.\WSSSharedServiceUsage.ps1
.\WSSSharedServiceBDC.ps1
.\WSSSharedServiceSTS.ps1

function Create-SharedServiceInstance()
{

$ServerInst = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPServer']$");
$ServerInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $global:ComputerName);
$ServerInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServer']/ComputerID$", $global:ComputerName);
$ServerInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServer']/FarmID$", $global:FarmID);

Create-TopologySharedServiceInstance($ServerInst);
Create-UsageSharedServiceInstance($ServerInst);
Create-BDCSharedServiceInstance($ServerInst);
Create-SecurityTokenSharedServiceInstance($ServerInst);
}

$global:ComputerName = $Args[2];
$global:FarmID = "";
Get-Farm;
Get-LocalServer;

$global:DiscData = Create-DiscoveryData;

if ($null -ne $global:Farm)
{
$global:HostServer = $global:LocalServer.Name;
$global:FarmID = $global:LocalServer.Farm.Id.ToString();

$MainWebServer = IsMainServer($true);

if ($MainWebServer)
{
if ($global:Debug) { $global:EventLog_Debug_MajorServer -f $MyInvocation.MyCommand }

Create-TopologySharedService;
Create-UsageSharedService;
Create-BDCSharedService;
Create-SecurityTokenSharedService;
}

Create-SharedServiceInstance;
}

Deliver-DiscoveryData($global:DiscData);

if ($global:Debug) { LogScriptTime($MyInvocation) }

Release-Resources;
</Script></Contents>
</File>
<File>
<Name>WSSSharedServiceTopology.ps1</Name>
<Contents><Script>function global:Create-TopologySharedService()
{

$SSGroup = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceGroup']$");
$SSGroup.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup']/FarmID$", $global:FarmID);

$WSSService = Get-Service($global:SPTopology);

if (($null -ne $WSSService) -and ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $WSSService.Status))
{
$ServiceApps = $WSSService.Applications;
if (0 -lt $ServiceApps.Count)
{
$SService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedService.Topology']$");
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/FarmID$", $global:FarmID);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/ServiceID$", $WSSService.Id.ToString());
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/TypeName$", $global:SPTopology);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/NotShared$", "False");
$SService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $WSSService.TypeName);
$global:DiscData.AddInstance($SService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedService.Topology"), $false);

$SSGroupServiceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup.Contains.SPSharedService']$");
$SSGroupServiceRel.Source = $SSGroup;
$SSGroupServiceRel.Target = $SService;
$global:DiscData.AddInstance($SSGroupServiceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceGroup.Contains.SPSharedService"), $false);

foreach ($App in $ServiceApps)
{
if ($App.Status -eq [Microsoft.SharePoint.Administration.SPObjectStatus]::Online)
{

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.Topology']$");
$AppService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $App.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/TypeName$", $App.GetType().FullName);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Topology']/IsShared$", $App.Shared.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Topology']/Uri$", $App.Uri.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Topology']/ApplicationPool$", $App.ApplicationPool.Name);
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.Topology"), $false);

$ServiceApplicationRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedService.Contains.SPSharedServiceApplication']$");
$ServiceApplicationRel.Source = $SService;
$ServiceApplicationRel.Target = $AppService;
$global:DiscData.AddInstance($ServiceApplicationRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedService.Contains.SPSharedServiceApplication"), $false);
}
}
}
}

}

function global:Create-TopologySharedServiceInstance([System.Object] $ServerInst)
{

$TopologyUri = $null;
$TopologyId = $null;

$SPTopology = Get-Service($global:SPTopology);

foreach ($IisWebapplication in $SPTopology.Applications)
{

foreach ($EndPoint in $IisWebapplication.EndPoints)
{
foreach ($Address in $EndPoint.ListenUris)
{
if ($Address.Host.ToLower().Contains($global:HostServer.ToLower()))
{
$TopologyId = $IisWebapplication.Id.ToString();
$TopologyUri = $EndPoint.Uri;
break;
}
}
}
}
Handle-Errors(($global:EventLog_Fail_Retrieve_Object -f $global:SPTopology), $false);

if (($null -ne $TopologyUri) -and ($null -ne $TopologyId))
{
$SPTopologyInstance = Get-ServiceInstance($global:SPTopology);
if ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $SPTopologyInstance.Status)
{

$ServiceInst = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPServiceInstance.Topology']$");
$ServiceInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $SPTopologyInstance.TypeName);
$ServiceInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $global:ComputerName);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/FarmID$", $global:FarmID);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/HostServer$", $global:HostServer);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/TypeName$", $SPTopologyInstance.GetType().FullName);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance.Topology']/Uri$", $TopologyUri.AbsoluteUri);
$global:DiscData.AddInstance($ServiceInst);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPServiceInstance.Topology"), $false);

$ServerServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPServer.Contains.SPServiceInstance']$");
$ServerServiceInstanceRel.Source = $ServerInst;
$ServerServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ServerServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPServer.Contains.SPServiceInstance"), $false);

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.Topology']$");
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $TopologyId);
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.Topology"), $false);

$ApplicationServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Contains.SPServiceInstance']$");
$ApplicationServiceInstanceRel.Source = $AppService;
$ApplicationServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ApplicationServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceApplication.Contains.SPServiceSPServiceInstance"), $false);
}
}

}

</Script></Contents>
</File>
<File>
<Name>WSSSharedServiceUsage.ps1</Name>
<Contents><Script>function global:Create-UsageSharedServiceInstance([System.Object] $ServerInst)
{

$SPUsageInstance = Get-ServiceInstance($global:SPUsage);
if ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $SPUsageInstance.Status)
{

$ServiceInst = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPServiceInstance.Usage']$");
$ServiceInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $SPUsageInstance.TypeName);
$ServiceInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $global:ComputerName);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/FarmID$", $global:FarmID);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/HostServer$", $global:HostServer);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/TypeName$", $SPUsageInstance.GetType().FullName);
$global:DiscData.AddInstance($ServiceInst);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPServiceInstance.Usage"), $false);

$ServerServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPServer.Contains.SPServiceInstance']$");
$ServerServiceInstanceRel.Source = $ServerInst;
$ServerServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ServerServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPServer.Contains.SPServiceInstance"), $false);

foreach ($App in $SPUsageInstance.Service.Applications)
{
foreach ($Instance in $App.ServiceInstances)
{
if ($SPUsageInstance.Id.ToString() -eq $Instance.Id.ToString())
{

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.Usage']$");
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.Usage"), $false);

$ApplicationServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Contains.SPServiceInstance']$");
$ApplicationServiceInstanceRel.Source = $AppService;
$ApplicationServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ApplicationServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceApplication.Contains.SPServiceInstance"), $false);
}
}
}
}

}

function global:Create-UsageSharedService()
{

$SSGroup = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceGroup']$");
$SSGroup.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup']/FarmID$", $global:FarmID);

$WSSService = Get-Service($global:SPUsage);

if (($null -ne $WSSService) -and ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $WSSService.Status))
{
$ServiceApps = $WSSService.Applications;
if (0 -lt $ServiceApps.Count)
{
$SService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedService.Usage']$");
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/FarmID$", $global:FarmID);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/ServiceID$", $WSSService.Id.ToString());
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/TypeName$", $global:SPUsage);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/NotShared$", "False");
$SService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $WSSService.TypeName);
$global:DiscData.AddInstance($SService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedService.Usage"), $false);

$SSGroupServiceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup.Contains.SPSharedService']$");
$SSGroupServiceRel.Source = $SSGroup;
$SSGroupServiceRel.Target = $SService;
$global:DiscData.AddInstance($SSGroupServiceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceGroup.Contains.SPSharedService"), $false);

foreach ($App in $ServiceApps)
{
if ($App.Status -eq [Microsoft.SharePoint.Administration.SPObjectStatus]::Online)
{
$DB = $App.UsageDatabase;

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.Usage']$");
$AppService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $App.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/TypeName$", $App.GetType().FullName);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Usage']/IsLoggingEnabled$", $App.LoggingEnabled.ToString());
if ($null -ne $DB)
{
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Usage']/Database$", $DB.Server.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Usage']/Server$", $DB.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Usage']/ConnectionString$", $DB.DatabaseConnectionString);
}
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.Usage"), $false);

$ServiceApplicationRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedService.Contains.SPSharedServiceApplication']$");
$ServiceApplicationRel.Source = $SService;
$ServiceApplicationRel.Target = $AppService;
$global:DiscData.AddInstance($ServiceApplicationRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedService.Contains.SPSharedServiceApplication"), $false);
}
}
}
}

}

</Script></Contents>
</File>
<File>
<Name>WSSSharedServiceBDC.ps1</Name>
<Contents><Script>function global:Create-BDCSharedServiceInstance([System.Object] $ServerInst)
{

$SPBDCInstance = Get-ServiceInstance($global:SPBDC);
if ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $SPBDCInstance.Status)
{

$ServiceInst = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPServiceInstance.BDC']$");
$ServiceInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $SPBDCInstance.TypeName);
$ServiceInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $global:ComputerName);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/FarmID$", $global:FarmID);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/HostServer$", $global:HostServer);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/TypeName$", $SPBDCInstance.GetType().FullName);
$global:DiscData.AddInstance($ServiceInst);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPServiceInstance.BDC"), $false);

$ServerServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPServer.Contains.SPServiceInstance']$");
$ServerServiceInstanceRel.Source = $ServerInst;
$ServerServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ServerServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPServer.Contains.SPServiceInstance"), $false);

foreach ($App in $SPBDCInstance.Service.Applications)
{
foreach ($Instance in $App.ServiceInstances)
{
if ($SPBDCInstance.Id.ToString() -eq $Instance.Id.ToString())
{

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.BDC']$");
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.BDC"), $false);

$ApplicationServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Contains.SPServiceInstance']$");
$ApplicationServiceInstanceRel.Source = $AppService;
$ApplicationServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ApplicationServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceApplication.Contains.SPServiceInstance"), $false);
}
}
}
}

}

function global:Create-BDCSharedService()
{

$SSGroup = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceGroup']$");
$SSGroup.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup']/FarmID$", $global:FarmID);

$WSSService = Get-Service($global:SPBDC);
if (($null -ne $WSSService) -and ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $WSSService.Status))
{
$ServiceApps = $WSSService.Applications;
if (0 -lt $ServiceApps.Count)
{
$SService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedService.BDC']$");
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/FarmID$", $global:FarmID);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/ServiceID$", $WSSService.Id.ToString());
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/TypeName$", $global:SPBDC);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/NotShared$", "False");
$SService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $WSSService.TypeName);
$global:DiscData.AddInstance($SService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedService.BDC"), $false);

$SSGroupServiceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup.Contains.SPSharedService']$");
$SSGroupServiceRel.Source = $SSGroup;
$SSGroupServiceRel.Target = $SService;
$global:DiscData.AddInstance($SSGroupServiceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceGroup.Contains.SPSharedService"), $false);

foreach ($App in $ServiceApps)
{
if ($App.Status -eq [Microsoft.SharePoint.Administration.SPObjectStatus]::Online)
{

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.BDC']$");
$AppService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $App.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/TypeName$", $App.GetType().FullName);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.BDC']/ApplicationPool$", $App.ApplicationPool.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.BDC']/ApplicationVersion$", $App.ApplicationVersion.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.BDC']/IsShared$", $App.Shared.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.BDC']/Uri$", $App.Uri.ToString());
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.BDC"), $false);

$ServiceApplicationRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedService.Contains.SPSharedServiceApplication']$");
$ServiceApplicationRel.Source = $SService;
$ServiceApplicationRel.Target = $AppService;
$global:DiscData.AddInstance($ServiceApplicationRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedService.Contains.SPSharedServiceApplication"), $false);

Create-BDCDatabase($App, $AppService);
}
}
}
}

}

function global:Create-BDCDatabase([System.Object] $Applications)
{

$MOSSServiceApplication = $Applications[0];
$SCOMServiceApplication = $Applications[1];
if ($null -eq $SCOMServiceApplication)
{
return;
}

$SPDatabase = $MOSSServiceApplication.Database;
$BDCDatabaseId = $SPDatabase.Id.ToString();
$BDCDatabaseName = $SPDatabase.Name;
$BDCConnectionString = $SPDatabase.DatabaseConnectionString;
$BDCLegacyConnectionString = $SPDatabase.LegacyDatabaseConnectionString;

if ($null -ne $BDCDatabaseId)
{

$BDCDB = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.BDC.Database']$");
$BDCDB.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $BDCDatabaseName);
$BDCDB.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPDatabase']/FarmID$", $global:FarmID);
$BDCDB.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPDatabase']/DatabaseID$", $BDCDatabaseId);
$BDCDB.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPDatabase']/ConnectionString$", $BDCConnectionString);
$BDCDB.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPDatabase']/LegacyConnectionString$", $BDCLegacyConnectionString);
$global:DiscData.AddInstance($BDCDB);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.BDC.Database"), $false);

$ApplictionDatabaseRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Contains.SPSharedServiceDatabase']$");
$ApplictionDatabaseRel.Source = $SCOMServiceApplication;
$ApplictionDatabaseRel.Target = $BDCDB;
$global:DiscData.AddInstance($ApplictionDatabaseRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceApplication.Contains.SPSharedServiceDatabase"), $false);
}

}

</Script></Contents>
</File>
<File>
<Name>WSSSharedServiceSTS.ps1</Name>
<Contents><Script>function global:Create-SecurityTokenSharedServiceInstance([System.Object] $ServerInst)
{

$SPSecurityTokenInstance = Get-ServiceInstance($global:SPSecurityToken);
if ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $SPSecurityTokenInstance.Status)
{

$ServiceInst = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPServiceInstance.SecurityToken']$");
$ServiceInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $SPSecurityTokenInstance.TypeName);
$ServiceInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $global:ComputerName);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/FarmID$", $global:FarmID);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/HostServer$", $global:HostServer);
$ServiceInst.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPServiceInstance']/TypeName$", $SPSecurityTokenInstance.GetType().FullName);
$global:DiscData.AddInstance($ServiceInst);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPServiceInstance.SecurityToken"), $false);

$ServerServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPServer.Contains.SPServiceInstance']$");
$ServerServiceInstanceRel.Source = $ServerInst;
$ServerServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ServerServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPServer.Contains.SPServiceInstance"), $false);

foreach ($App in $SPSecurityTokenInstance.Service.Applications)
{
foreach ($Instance in $App.ServiceInstances)
{
if ($SPSecurityTokenInstance.Id.ToString() -eq $Instance.Id.ToString())
{

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.SecurityToken']$");
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.SecurityToken"), $false);

$ApplicationServiceInstanceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.Contains.SPServiceInstance']$");
$ApplicationServiceInstanceRel.Source = $AppService;
$ApplicationServiceInstanceRel.Target = $ServiceInst;
$global:DiscData.AddInstance($ApplicationServiceInstanceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceApplication.Contains.SPServiceInstance"), $false);
}
}
}
}

}

function global:Create-SecurityTokenSharedService()
{

$SSGroup = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceGroup']$");
$SSGroup.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup']/FarmID$", $global:FarmID);

$WSSService = Get-Service($global:SPSecurityToken);
if (($null -ne $WSSService) -and ([Microsoft.SharePoint.Administration.SPObjectStatus]::Online -eq $WSSService.Status))
{
$ServiceApps = $WSSService.Applications;
if (0 -lt $ServiceApps.Count)
{
$SService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedService.SecurityToken']$");
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/FarmID$", $global:FarmID);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/ServiceID$", $WSSService.Id.ToString());
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/TypeName$", $global:SPSecurityToken);
$SService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPService']/NotShared$", "False");
$SService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $WSSService.TypeName);
$global:DiscData.AddInstance($SService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedService.SecurityToken"), $false);

$SSGroupServiceRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceGroup.Contains.SPSharedService']$");
$SSGroupServiceRel.Source = $SSGroup;
$SSGroupServiceRel.Target = $SService;
$global:DiscData.AddInstance($SSGroupServiceRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedServiceGroup.Contains.SPSharedService"), $false);

foreach ($App in $ServiceApps)
{
if ($App.Status -eq [Microsoft.SharePoint.Administration.SPObjectStatus]::Online)
{

$AppService = $global:DiscData.CreateClassInstance("$MPElement[Name='Microsoft.SharePoint.2013.SPSharedServiceApplication.SecurityToken']$");
$AppService.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $App.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/FarmID$", $global:FarmID);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/ServiceApplicationID$", $App.Id.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication']/TypeName$", $App.GetType().FullName);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.SecurityToken']/ApplicationPool$", $App.ApplicationPool.Name);
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.SecurityToken']/ApplicationVersion$", $App.ApplicationVersion.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.SecurityToken']/IsShared$", $App.Shared.ToString());
$AppService.AddProperty("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedServiceApplication.SecurityToken']/Uri$", $App.Uri.ToString());
$global:DiscData.AddInstance($AppService);
Handle-Errors(($global:EventLog_Fail_Create_Class -f "SPSharedServiceApplication.SecurityToken"), $false);

$ServiceApplicationRel = $global:DiscData.CreateRelationshipInstance("$MPElement[Name='WSS!Microsoft.SharePoint.SPSharedService.Contains.SPSharedServiceApplication']$");
$ServiceApplicationRel.Source = $SService;
$ServiceApplicationRel.Target = $AppService;
$global:DiscData.AddInstance($ServiceApplicationRel);
Handle-Errors(($global:EventLog_Fail_Create_Relationship -f "SPSharedService.Contains.SPSharedServiceApplication"), $false);
}
}
}
}

}

</Script></Contents>
</File>
</Files>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>