Microsoft.IntelligencePacks.Types.WorkspaceSettingsDistributionDataSource (WriteActionModuleType)

Element properties:

TypeWriteActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
InputTypeSystem.BaseData

Member Modules:

ID Module Type TypeId RunAs 
WA WriteAction Microsoft.Windows.PowerShellWriteAction Default

Overrideable Parameters:

IDParameterTypeSelector
ScriptTimeoutSecondsint$Config/ScriptTimeoutSeconds$

Source Code:

<WriteActionModuleType ID="Microsoft.IntelligencePacks.Types.WorkspaceSettingsDistributionDataSource" Accessibility="Internal" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ScriptTimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="ScriptTimeoutSeconds" Selector="$Config/ScriptTimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<WriteAction ID="WA" TypeID="Windows!Microsoft.Windows.PowerShellWriteAction">
<ScriptName>OperationalSettingsOverrides.ps1</ScriptName>
<ScriptBody><Script>try
{
$SCOMPowerShellKey = "HKLM:\SOFTWARE\Microsoft\System Center Operations Manager\12\Setup\Powershell\V2"
$SCOMModulePath = Join-Path (Get-ItemProperty $SCOMPowerShellKey).InstallDirectory "OperationsManager"
if (!(Get-Module OperationsManager))
{
Import-module $SCOMModulePath
}

# Get the WebProxyAddress property from the advisor settings class.
$advisorSettingsClass = Get-SCOMClass -Name 'Microsoft.SystemCenter.Advisor.Settings'
$advisorSettingsInstance = Get-SCOMClassInstance -Class $advisorSettingsClass
$customerId = $advisorSettingsInstance.'[Microsoft.SystemCenter.Advisor.Settings].CustomerIdentifier'.Value
$proxyAddress = $advisorSettingsInstance.'[Microsoft.SystemCenter.Advisor.Settings].WebProxyAddress'.Value

$mp = Get-SCOMManagementPack -Name 'Microsoft.SystemCenter.Advisor.SecureReferenceOverride'

$workspaceOverrideId = 'Microsoft.IntelligencePacks.Types.DiscoverWorkspaceId.WorkspaceIdOverride'
$workspaceDiscoveryEnabledOverrideId = 'Microsoft.IntelligencePacks.Types.DiscoverWorkspaceId.OptInOverride'
$workspaceDiscoveryEnabledForCSOverrideId = 'Microsoft.IntelligencePacks.Types.DiscoverWorkspaceId.CollectionServerOverride'
$proxyAddressOverrideId = 'Microsoft.IntelligencePacks.Types.HealthServiceProxyConfigurationOverride.ProxyAddress'
$proxySettingEnabledOverrideId = 'Microsoft.IntelligencePacks.Types.HealthServiceProxyConfiguration.OptInOverride'
$proxySettingEnabledForCSOverrideId = 'Microsoft.IntelligencePacks.Types.HealthServiceProxyConfiguration.CollectionServerOverride'

$healthServiceClass = Get-SCOMClass -Name 'Microsoft.SystemCenter.HealthService'
$optInGroup = Get-SCOMClass -Name 'Microsoft.SystemCenter.Advisor.Library.ServerOptInOutGroup'
$collectionServer = Get-SCOMClass -Name 'Microsoft.SystemCenter.CollectionManagementServer'

$didMakeChanges = $false

$workspaceIdDiscovery = Get-SCOMDiscovery -Name 'Microsoft.IntelligencePacks.Types.DiscoverWorkspaceId'

$oldWorkspaceOverride = Get-SCOMOverride -Discovery $workspaceIdDiscovery | where {$_.Name -eq $workspaceOverrideId}

if (!$oldWorkspaceOverride -or $oldWorkspaceOverride.Value -ne $customerId -or $oldWorkspaceOverride.Discovery.Id -ne $workspaceIdDiscovery.Id)
{
$workspaceOverride = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackDiscoveryConfigurationOverride($mp, $workspaceOverrideId)
$workspaceOverride.Discovery = $workspaceIdDiscovery
$workspaceOverride.Context = $healthServiceClass
$workspaceOverride.Value = $customerId
$workspaceOverride.Module = 'DS'
$workspaceOverride.Parameter = 'WorkspaceId'

$didMakeChanges = $true
}

# Enable the workspace id discovery for members of the ServerOptInGroup and CollectionServer
$oldWorkspaceIdDiscoveryEnabledOverride = Get-SCOMOverride -Discovery $workspaceIdDiscovery | where {$_.Name -eq $workspaceDiscoveryEnabledOverrideId}
$oldWorkspaceIdDiscoveryEnabledForCSOverride = Get-SCOMOverride -Discovery $workspaceIdDiscovery | where {$_.Name -eq $workspaceDiscoveryEnabledForCSOverrideId}

if (!$oldWorkspaceIdDiscoveryEnabledOverride)
{
$workspaceIdDiscoveryEnabledOverride = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackDiscoveryPropertyOverride($mp, $workspaceDiscoveryEnabledOverrideId)
$workspaceIdDiscoveryEnabledOverride.Context = $optInGroup
$workspaceIdDiscoveryEnabledOverride.Discovery = $workspaceIdDiscovery
$workspaceIdDiscoveryEnabledOverride.Property = 'Enabled'
$workspaceIdDiscoveryEnabledOverride.Value = 'true'

$didMakeChanges = $true
}

if (!$oldWorkspaceIdDiscoveryEnabledForCSOverride)
{
$workspaceIdDiscoveryEnabledForCSOverride = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackDiscoveryPropertyOverride($mp, $workspaceDiscoveryEnabledForCSOverrideId)
$workspaceIdDiscoveryEnabledForCSOverride.Context = $collectionServer
$workspaceIdDiscoveryEnabledForCSOverride.Discovery = $workspaceIdDiscovery
$workspaceIdDiscoveryEnabledForCSOverride.Property = 'Enabled'
$workspaceIdDiscoveryEnabledForCSOverride.Value = 'true'

$didMakeChanges = $true
}
$proxyAddressRule = Get-SCOMRule -Name 'Microsoft.IntelligencePacks.Types.HealthServiceProxyConfiguration'

$oldProxyAddressoverride = Get-SCOMOverride -Rule $proxyAddressRule | where {$_.Name -eq $proxyAddressOverrideId}

if($proxyaddress)
{
if (!$oldProxyAddressoverride -or $oldProxyAddressoverride.Value -ne $proxyAddress -or $oldProxyAddressoverride.Rule.Id -ne $proxyAddressRule.Id)
{
$proxyAddressoverride = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackRuleConfigurationOverride($mp, $proxyAddressOverrideId)
$proxyAddressoverride.Context = $healthServiceClass
$proxyAddressoverride.Module = 'WA'
$proxyAddressoverride.Rule = $proxyAddressRule
$proxyAddressoverride.Parameter='WebProxyAddress'
$proxyAddressoverride.Value = $proxyAddress

$didMakeChanges = $true
}
}
else
{
#$mp.GetOverride throws an exception if override is not there it is more reliable if we geta $null from Get-SCOMOverride -Rule | where {}
$proxyAddressoverride = Get-SCOMOverride -Rule $proxyAddressRule | where {$_.Name -eq $proxyAddressOverrideId}
if ($proxyAddressoverride -ne $null)
{
#updating the original $proxyAddressoverride does not work - only when getting it from the $mp.Getoverride it works
$proxyAddressoverride = $mp.GetOverride($proxyAddressOverrideId)
$proxyAddressoverride.Status = 'PendingDelete'

$didMakeChanges= $true
}
}

# Enable the proxy setting rule for members of the ServerOptInGroup and CollectionServer
$oldProxySettingEnabledOverride = Get-SCOMOverride -Rule $proxyAddressRule | where {$_.Name -eq $proxySettingEnabledOverrideId}
$oldProxySettingEnabledForCSOverride = Get-SCOMOverride -Rule $proxyAddressRule | where {$_.Name -eq $proxySettingEnabledForCSOverrideId}

if (!$oldProxySettingEnabledOverride)
{
$proxySettingEnabledOverride = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackRulePropertyOverride($mp, $proxySettingEnabledOverrideId)
$proxySettingEnabledOverride.Context = $optInGroup
$proxySettingEnabledOverride.Rule = $proxyAddressRule
$proxySettingEnabledOverride.Property = 'Enabled'
$proxySettingEnabledOverride.Value = 'true'

$didMakeChanges = $true
}
if (!$oldProxySettingEnabledForCSOverride)
{
$proxySettingEnabledForCSOverride = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackRulePropertyOverride($mp, $proxySettingEnabledForCSOverrideId)
$proxySettingEnabledForCSOverride.Context = $collectionServer
$proxySettingEnabledForCSOverride.Rule = $proxyAddressRule
$proxySettingEnabledForCSOverride.Property = 'Enabled'
$proxySettingEnabledForCSOverride.Value = 'true'

$didMakeChanges = $true
}

if ($didMakeChanges)
{
$mp.AcceptChanges()
}
}
finally
{
Get-Module OperationsManager | Remove-Module
}
</Script></ScriptBody>
<Parameters/>
<TimeoutSeconds>$Config/ScriptTimeoutSeconds$</TimeoutSeconds>
</WriteAction>
</MemberModules>
<Composition>
<Node ID="WA"/>
</Composition>
</Composite>
</ModuleImplementation>
<InputType>System!System.BaseData</InputType>
</WriteActionModuleType>