
会社のポリシーでは、すべてのサーバーに管理者を割り当てることが義務付けられています。この情報は、コンピュータ オブジェクトの「管理者」フィールドに保存されます。
この AD フィールドを介して設定される動的グループを SCOM に作成すると非常に便利です。そしてそこに私の問題があります。
これまで試した手順。
1. Windows コンピューター ターゲットの属性「Managed by」を作成します。この属性は、SELECT * FROM DS_computer
プロパティを持つWMI クエリによって実行されますDS_managedBy
。
2. 動的フィルターを使用してグループを作成します。(Object is Windows-Computer_Extended AND (Managed by Equals usr) AND True)
これは理論的には合理的に思えますが、どうやらまったく機能しないようです。
私が作ろうとしていることは実際に可能でしょうか? この問題にどう取り組めばいいでしょうか?
答え1
少し調べてみると、すでに誰かがこの問題に取り組んでいることが分かりました。ある意味。私はこれスクリプト。最後の数行を削除し、必要なロジックを追加しました。乱雑ですが、うまく機能します。変更する必要があるのは、管理サーバーと包含正規表現だけです (複数のドメインがありますが、この種の自動化が必要なのは 1 つのドメインだけです)。
<Functions from original script go here>
$ManagementServer = "<ManagementServerGoesHere>"
$ManagementGroup = GetSCOMManagementGroup -ms $ManagementServer
$Groups = Get-SCOMGroup -DisplayName "Managed-By *"
$Groups |% {
$Group = $_
$Group.DisplayName -match "Managed-By (\w{3})" | Out-Null
$sAMAccountName = $Matches[1]
$User = Get-ADUser -Filter {sAMAccountName -eq $sAMAccountName}
$UserDN = $User.DistinguishedName
$ADManagedByComputers = Get-ADComputer -Filter {ManagedBy -eq $UserDN}
$SCOMManagedByComputer = Get-SCOMGroup $Group.id | Get-SCOMClassInstance
[string]$InstancesToAdd = ""
[string]$InstancesToRemove = ""
$ADManagedByComputers | % {
if($SCOMManagedByComputer.DisplayName -notcontains $_.DNSHostName) {
$Agent = Get-SCOMAgent -DNSHostName $_.DNSHostName
if($Agent) {
Write-Host ($_.DNSHostName + " not in SCOM Group " + $Group.DisplayName) -ForegroundColor Yellow
$InstancesToAdd = $InstancesToAdd + "," + $Agent.Id
} else {
Write-Host ($_.DNSHostName + " has no Agent installed!") -ForegroundColor Gray
}
} else {
Write-Host ($_.DNSHostname + " already in SCOM Group " + $Group.DisplayName) -ForegroundColor Green
}
}
$SCOMManagedByComputer | % {
if($_.DisplayName -match "<InclusionRegex>") {
if($ADManagedByComputers.DNSHostName -notcontains $_.DisplayName) {
Write-Host ($_.DisplayName + " should not be in SCOM Group " + $Group.DisplayName) -ForegroundColor DarkYellow
$Agent = Get-SCOMAgent -DNSHostName $_.DisplayName
if($Agent) {
$InstancesToRemove = $InstancesToRemove + "," + $Agent.Id
}
}
} else {
Write-Host ($_.DisplayName + " is not in the domain scope. Skipping.") -ForegroundColor Cyan
}
}
$InstancesToAdd = $InstancesToAdd.Trim(",")
$InstancesToRemove = $InstancesToRemove.Trim(",")
$ManagementPackName = ($Group | Get-SCOMClass).ManagementPackName
$ManagementPackID = (Get-SCManagementPack -Name $ManagementPackName)
$MP = ValidateGroup -mg $ManagementGroup -mp $MP -groupID $Group.FullName
If($InstancesToAdd -ne "" -and $InstancesToRemove -ne "") {
$MP = UpdateGroup -mg $ManagementGroup -mp $ManagementPackID -groupID $Group.FullName -instancesToAdd $InstancesToAdd -instancesToRemove $InstancesToRemove
}
if($InstancesToAdd -ne "" -and $InstancesToRemove -eq "") {
$MP = UpdateGroup -mg $ManagementGroup -mp $MP -groupID $Group.FullName -instancesToAdd $InstancesToAdd
}
if($InstancesToAdd -eq "" -and $InstancesToRemove -ne "") {
$MP = UpdateGroup -mg $ManagementGroup -mp $MP -groupID $Group.FullName -instancesToRemove $InstancesToRemove
}
}