Set DebugTrace For SharePoint Management Pack

Microsoft.SharePoint.Library.SetDebugTrace (Task)

Enable or Disable DebugTrace for SharePoint Management Pack Discovery and Monitoring scripts.

Element properties:

TargetMicrosoft.SharePoint.Library.SPFarmGroup
AccessibilityInternal
CategoryOperations
EnabledTrue
RemotableFalse
Timeout300

Member Modules:

ID Module Type TypeId RunAs 
PA WriteAction Microsoft.SharePoint.Library.PSTaskWithoutWorkingDir Default

Source Code:

<Task ID="Microsoft.SharePoint.Library.SetDebugTrace" Accessibility="Internal" Enabled="true" Target="Microsoft.SharePoint.Library.SPFarmGroup" Timeout="300">
<Category>Operations</Category>
<WriteAction ID="PA" TypeID="Microsoft.SharePoint.Library.PSTaskWithoutWorkingDir">
<ScriptName>DebugTask.ps1</ScriptName>
<ScriptBody><Script>$global:_MOSSMPName = "Microsoft.SharePoint.Library"
$global:_OverrideMPName = $global:_MOSSMPName + ".Override"
$global:_OverrideMPFriendlyName = "SharePoint Management Pack Overrides"
$global:_OverrideMPVersion = "1.0.0.0"

$global:idlMPRefed = @()
$global:bOverrideMPChanged = $false
$global:mpOverride = $null

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

$ErrMsg = ""
$IsExit = $true

if ("System.String" -eq $Arguments.GetType().FullName)
{
$ErrMsg = $Arguments
}
else
{
$ErrMsg = $Arguments[0]
$IsExit = $Arguments[1]
}

$ErrorActionPreference = "Continue"
$error | foreach {$host.ui.WriteErrorLine($_)}
$host.ui.WriteErrorLine($ErrMsg)

if ($IsExit)
{
if ($global:bOverrideMPChanged)
{
$global:mpOverride.RejectChanges()
}
exit(1)
}
else
{
$error.Clear()
$ErrorActionPreference = "SilentlyContinue"
}
}

function global:Accept-Overrides([System.Object] $mp)
{
$mp.AcceptChanges()
if ($error)
{
$mp.RejectChanges()
Handle-Error("Failed to update override in management pack {0}" -f $mp.Name)
}
}

function global:Ensure-ManagementPackReference([System.Object] $mpref)
{
$mp = $mpref.GetElement().GetManagementPack()

$idMP = $mp.Id
if ($global:idlMPRefed -notcontains $idMP)
{
$global:idlMPRefed += @($idMP)
$refmp = new-object Microsoft.EnterpriseManagement.Configuration.ManagementPackReference($mp)
$global:mpOverride.References.Add("Ref_" + $idMP.ToString("N"), $refmp)
$global:bOverrideMPChanged = $true
}
Handle-Error("Failed to ensure management reference")
}

function global:Get-ConfigurationOverride([System.Object] $Arguments)
{
$sType = $Arguments[0]
$overrides = $Arguments[1]
$sConfig = $Arguments[2]
foreach ($override in $overrides)
{
if ($override.GetType().Name -eq $sType -and $override.Parameter -eq $sConfig)
{
return $override
}
}
return $null
}

function global:Get-DiscoveryConfigurationOverride([System.Object] $Arguments)
{
switch($global:operationsManagerVersionMajor)
{
6
{
return Get-ConfigurationOverride("MonitoringDiscoveryConfigurationOverride", $Arguments[0], $Arguments[1])
}
7
{
return Get-ConfigurationOverride("ManagementPackDiscoveryConfigurationOverride", $Arguments[0], $Arguments[1])
}
default { throw("Not supported Operations Manager version '$($global:operationsManagerVersionMajor)'.") }
}
}

function global:Get-MonitorConfigurationOverride([System.Object] $Arguments)
{
switch($global:operationsManagerVersionMajor)
{
6
{
return Get-ConfigurationOverride("MonitorConfigurationOverride", $Arguments[0], $Arguments[1])
}
7
{
return Get-ConfigurationOverride("ManagementPackMonitorConfigurationOverride", $Arguments[0], $Arguments[1])
}
default { throw("Not supported Operations Manager version '$($global:operationsManagerVersionMajor)'.") }
}
}

function global:Ensure-OverrideManagementPack([System.Object] $Arguments)
{
$mg = $Arguments[0]
$mp = $Arguments[1]
$mpAlias = $Arguments[2]

if ($mp.Sealed)
{
$refmp = new-object Microsoft.EnterpriseManagement.Configuration.ManagementPackReference($mp)
$global:mpOverride = $mg.GetManagementPacks($global:_OverrideMPName)[0]
if ($error)
{
$error.Clear()
write-output("Create override management pack $global:_OverrideMPName")
$global:mpOverride = new-object Microsoft.EnterpriseManagement.Configuration.ManagementPack($global:_OverrideMPName, $global:_OverrideMPFriendlyName, (new-object System.Version($global:_OverrideMPVersion)), $mg)
$global:mpOverride.References.Add($mpAlias, $refmp)
$mg.ImportManagementPack($global:mpOverride)
Handle-Error("Failed to create override management pack $global:_OverrideMPName")
$global:idlMPRefed += @($global:mpOverride.Id, $mp.Id)
}
else
{
write-output("Found override management pack $global:_OverrideMPName version {0}" -f $global:mpOverride.Version)
$global:idlMPRefed += @($global:mpOverride.Id)
if (! $global:mpOverride.References.ContainsValue($refmp))
{
write-output("Add {0} reference to the override managment pack" -f $mpName)
$global:mpOverride.References.Add($mpAlias, $refmp)
$global:idlMPRefed += @($mp.Id)
$global:bOverrideMPChanged = $true
}
}
}
else
{
write-output("Management pack $global:_MOSSMPName is not sealed. Overrides can only live within the same management pack")
$global:mpOverride = $mp
$global:idlMPRefed += @($mp.Id)
}

foreach ($refmp in $global:mpOverride.References.Values)
{
$global:idlMPRefed += @($refmp.GetManagementPack().Id)
}
}

function global:Create-ConfigurationOverride([System.Object] $Arguments)
{
$mpe = $Arguments[0]
$bMonitor = $Arguments[1]
$overrideName = $Arguments[2]
$sConfig = $Arguments[3]
$val = $Arguments[4]
$msg = $Arguments[5]

if ($bMonitor)
{
$override = new-object Microsoft.EnterpriseManagement.Configuration.ManagementPackMonitorConfigurationOverride($global:mpOverride, $overrideName)
$override.Monitor = [Microsoft.EnterpriseManagement.Configuration.ManagementPackElementReference``1[Microsoft.EnterpriseManagement.Configuration.ManagementPackMonitor]]::Op_Implicit($mpe)
Ensure-ManagementPackReference($override.Monitor)
}
else
{
$override = new-object Microsoft.EnterpriseManagement.Configuration.ManagementPackDiscoveryConfigurationOverride($global:mpOverride, $overrideName)
$override.Discovery = [Microsoft.EnterpriseManagement.Configuration.ManagementPackElementReference``1[Microsoft.EnterpriseManagement.Configuration.ManagementPackDiscovery]]::Op_Implicit($mpe)
Ensure-ManagementPackReference($override.Discovery)
$override.Module = $mpe.DataSource
}
$override.Context = $mpe.target
Ensure-ManagementPackReference($mpe.target)
$override.Parameter = $sConfig
$override.Value = $val
$global:bOverrideMPChanged = $true

if ($msg -eq $null)
{
$msg = "Create '" + $sConfig +"' configuration override with value $val for " + $mpe.Name
}

write-output($msg)
}

$error.Clear()
$ErrorActionPreference = "SilentlyContinue"

$null = [System.Reflection.Assembly]::Load("Microsoft.EnterpriseManagement.OperationsManager, Version=7.0.5000.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")
$global:operationsManagerVersionMajor = 7
if ($error)
{

$error.Clear()
$null = [System.Reflection.Assembly]::Load("Microsoft.EnterpriseManagement.OperationsManager, Version=6.0.4900.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")
Handle-Error("Failed to load Microsoft.EnterpriseManagement.OperationsManager.dll")
$global:operationsManagerVersionMajor = 6
}

$mg = new-object Microsoft.EnterpriseManagement.ManagementGroup("localhost")
Handle-Error("Failed to connect to local management group")

$global:_MOSSDSCMPName = "Microsoft.SharePoint.2019.Discovery"
$global:_MOSSMONMPName = "Microsoft.SharePoint.2019.Monitoring"
$global:_MPNames = @($_MOSSDSCMPName, $_MOSSMONMPName )

$global:_MPAliases = @{$_MOSSMPName = "MOSS"; $_MOSSDSCMPName = "MOSS19Core"; $_MOSSMONMPName = "MOSS19Monitoring";}

$global:_MPElements = @{}
$global:_MPElements[$_MOSSDSCMPName] = "Microsoft.SharePoint.2019.SPFarm.Discovery;Microsoft.SharePoint.2019.SPService.Discovery;Microsoft.SharePoint.2019.SPSharedService.Discovery;Microsoft.SharePoint.2019.SPHARule.Discovery"
$global:_MPElements[$_MOSSMONMPName] = "Microsoft.SharePoint.2019.SPHARuleMonitor.Availability;Microsoft.SharePoint.2019.SPHARuleMonitor.Configuration;Microsoft.SharePoint.2019.SPHARuleMonitor.Performance;Microsoft.SharePoint.2019.SPHARuleMonitor.Security;Microsoft.SharePoint.2019.SPHARuleMonitor.Custom;Microsoft.SharePoint.2019.SPHARuleMonitor.SPServer.Availability;Microsoft.SharePoint.2019.SPHARuleMonitor.SPServer.Configuration;Microsoft.SharePoint.2019.SPHARuleMonitor.SPServer.Performance;Microsoft.SharePoint.2019.SPHARuleMonitor.SPServer.Security;Microsoft.SharePoint.2019.SPHARuleMonitor.SPServer.Custom"


$sConfig = "DebugTrace"
$defVal = "False"
$newVal = $Args[0]

if ($newVal -eq $null)
{
$newVal = "True"
}

if (($newVal.ToUpper() -ne "TRUE") -and ($newVal.ToUpper() -ne "FALSE"))
{
write-output("'{0}' is not a valid DebugTrace setting, it must be True or False." -f $newVal)
exit(1)
}

foreach ($mpName in $global:_MPNames)
{
$global:bOverrideMPChanged = $false
$global:mpOverride = $null

$mp = $null

$mp = $mg.GetManagementPacks($mpName)[0]

if ($mp -eq $null)
{

if ($mpName -eq $global:_MOSSMPName)
{
write-output("Must install {0} to run this task!" -f $mpName)
exit(1)
}

else
{
continue
}
}

Ensure-OverrideManagementPack($mg, $mp, $global:_MPAliases[$mpName])

$sList = $global:_MPElements[$mpName].Split(';')

foreach ($elementName in $sList)
{
$override = $null
$bMonitor = $false
$workflowName = $elementName

if ($workflowName.Contains("Discovery"))
{
$mpe = $mp.GetDiscovery($workflowName)
}
else
{
$bMonitor = $true
$mpe = $mp.GetMonitor($workflowName)
}
Handle-Error("Cannot find the workflow '$workflowName'.")

$target = $mpe.Target
$criteria = new-object Microsoft.EnterpriseManagement.Configuration.MonitoringOverrideCriteria(("TargetId='{0}' AND ContextId='{1}'" -f $mpe.Id.ToString(), $target.Id.ToString()))
$overrides = $mg.GetMonitoringOverrides($criteria)

if ($bMonitor)
{
$override = Get-MonitorConfigurationOverride($overrides, $sConfig)
}
else
{
$override = Get-DiscoveryConfigurationOverride($overrides, $sConfig)
}

if ($override -eq $null)
{
if ($newVal.ToUpper() -eq "TRUE")
{
$sName = "Override.{0}.{1}" -f $workflowName, [guid]::NewGuid().ToString("N")
$msg = "Enable '{0}' configuration for {1}" -f $sConfig, $mpe.Name
Create-ConfigurationOverride($mpe, $bMonitor, $sName, $sConfig, $newval, $msg)
}
}

else
{
if ($newVal.ToUpper() -eq "FALSE")
{
$override.Status = [Microsoft.EnterpriseManagement.Configuration.ManagementPackElementStatus]::PendingDelete
$global:bOverrideMPChanged = $true
write-output("Disable '{0}' configuration for {1}" -f $sConfig, $mpe.Name)
}
}
}

Handle-Error("Failed to set DebugTrace")

$global:mpOverride.Verify()

if ($global:bOverrideMPChanged)
{
write-output("saving override changes...")
$global:bOverrideMPChanged = $false
Accept-Overrides($global:mpOverride)
}
}

write-output("SharePoint management pack configuration completed successfully")</Script></ScriptBody>
<Enabled>True</Enabled>
<TimeoutSeconds>300</TimeoutSeconds>
</WriteAction>
</Task>