びっくりした事象なのでメモ。
IE9までは、Proxyや、トップページ設定をGPOで行う場合は以下の項目を編集すればよかった。
しかし、IE10以降からは、上記箇所を設定してもGPOは反映されなくなる。
というか、サーバにIE10を入れる、あるいはWindowsServer2012にすると
上記設定項目自体がなくなる。
(WindowsServer2012でGPOを見た時の場合)
| http://technet.microsoft.com/ja-jp/library/cc787176%28WS.10%29.aspx |
| http://technet.microsoft.com/ja-jp/library/cc787567%28WS.10%29.aspx |
| http://technet.microsoft.com/ja-jp/library/cc737542%28WS.10%29.aspx |
| http://technet.microsoft.com/ja-jp/library/cc776774%28WS.10%29.aspx |
| http://technet.microsoft.com/ja-jp/library/cc728087%28WS.10%29.aspx |
#CheckGPO
Import-Module activedirectory
Import-Module grouppolicy
#origpoファイルの場所
$workpath="C:\hogehoge\"
#メール配信先設定
$smtpHost = "SMTPサーバアドレス"
$mailfrom = "FROMのアドレス"
$mailto = "メール配信先"
$mailsubject = "GPOCheckログ"
$mailer = New-Object System.net.mail.smtpclient($smtpHost)
function comparegpo ($crlink, $orilink, $crgpo, $origpo) {
#gpo設定 変更された場合は新しいGPOのバックアップを行い oriファイルを更新
compare-object $crgpo $origpo -property modificationtime,gpostatus,displayname | Set-Variable diffgpo
if ($diffgpo) {
"$(get-date) :--GPO変更が発生しました"
$diffgpo | sort displayname | ft -AutoSize
$timename=$(Get-ItemProperty $workpath\origpo.xml).LastWriteTime -replace "[/,:, ]",""
$diffgpo | ? { $_.sideindicator -eq "<=" } | % { "backup実施"; backup-gpo $_.displayname -path $workpath\gpbackup | fl }
move-item $workpath\origpo.xml $workpath\log\$timename"gpo.xml" | Out-null
$crgpo | Export-Clixml $workpath\origpo.xml
}
#link設定 変更された場合は oriファイルを更新
compare-object $crlink $orilink -Property target,displayname,enabled | Set-Variable diffgpl
if ($diffgpl) {
"$(get-date) :--GPO Linkに増減が発生しました"
$diffgpl | sort displayname | ft -AutoSize
$timename=$(Get-ItemProperty $workpath\orilink.xml).LastWriteTime -replace "[/,:, ]",""
move-item $workpath\orilink.xml $workpath\log\$timename"orilink.xml"
$crlink | Export-Clixml $workpath\orilink.xml
}
}
#origpo存在チェック
if (test-path "$workpath\origpo.xml"){
$origpo=Import-Clixml "$workpath\origpo.xml"
} else {
"origpo.xml NotFound"
get-gpo -all | Export-Clixml $workpath\origpo.xml
return
}
if (test-path "$workpath\orilink.xml"){
$orilink=Import-Clixml "$workpath\orilink.xml"
} else {
"orilink.xml NotFound"
Get-ADOrganizationalUnit -Filter 'Name -like "*"' | % { Get-GPInheritance -Target $_ } | ? { $_.gpolinks -ne "" } | % { $_.path; $_.gpolinks } | Export-Clixml $workpath\orilink.xml
return
}
#現在のOU状態の取得
$crlink = Get-ADOrganizationalUnit -Filter 'Name -like "*"' | % { Get-GPInheritance -Target $_ } | ? { $_.gpolinks -ne "" } | % { $_.path; $_.gpolinks }
$crgpo = get-gpo -all
#比較対象を関数で渡し、戻り値が存在した場合にはメールを出す
$result=comparegpo $crlink $orilink $crgpo $origpo
if ($result) {
$mailbody=[string]::join("`r`n", ($result | out-string -width 200 ))
$mailer.send($mailfrom, $mailto, $mailsubject, $mailbody )
$result | out-string -width 200 > $workpath\recent.log
$result
"変更が発生し、メールを出しました"
}
$work フォルダの配下にlog フォルダと、 gpbackupフォルダを用意してください。PS > Import-Module grouppolicy
PS > get-gpo -all
PS > Get-GPO -All | Export-Clixml -Path .\origpo.xmlでは、試しにGPOを変更して、比較してみましょう。
PS > $origpo=Import-Clixml .\origpo.xml
PS > $crgpo=Get-GPO -All
PS > Compare-Object $crgpo $origpo -Property displayname,modificationtime,GpoStatus | sort displayname
PS > Import-Module activedirectoryこれにより、ADやグループポリシーに関するコマンドを使用することができます。
PS > Import-Module grouppolicy
PS> Get-Command -module activedirectory
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-ADComputerServiceAccount Add-ADComputerServiceAccount...
Cmdlet Add-ADDomainControllerPasswo... Add-ADDomainControllerPasswo...
Cmdlet Add-ADFineGrainedPasswordPol... Add-ADFineGrainedPasswordPol...
Cmdlet Add-ADGroupMember Add-ADGroupMember [-Identity...
Cmdlet Add-ADPrincipalGroupMembership Add-ADPrincipalGroupMembersh...
:
PS > Get-Command -module grouppolicyさて、では例として下記のようにGPOがリンクされていた場合。
CommandType Name Definition
----------- ---- ----------
Cmdlet Backup-GPO Backup-GPO -Guid-Pat...
Cmdlet Copy-GPO Copy-GPO -SourceGuid...
Cmdlet Get-GPInheritance Get-GPInheritance [-Target] ...
Cmdlet Get-GPO Get-GPO [-Guid][[-Do...
Cmdlet Get-GPOReport Get-GPOReport [-Guid]...
PS> Get-GPInheritance -target "OU=GroupA,OU=UserList,DC=furyu,DC=local"ちょっとこれだけだとわかりづらいから、 GpoLinks だけを取り出してみる。
Name : groupa
ContainerType : OU
Path : ou=groupa,ou=userlist,dc=furyu,dc=local
GpoInheritanceBlocked : No
GpoLinks : {GPOtest1, GPOtest2}
InheritedGpoLinks : {GPOtest1, GPOtest2, Default Domain Policy}
PS > Get-GPInheritance -target "OU=GroupA,OU=UserList,DC=furyu,DC=local" | % { $_.gpolinks }これで、 OUが "OU=GroupA,OU=UserList,DC=furyu,DC=local" のかかっているリンクのGPOをとりだすことができました。
GpoId : 09ecc96a-2d91-4594-8474-4404e82241d2
DisplayName : GPOtest1
Enabled : True
Enforced : False
Target : ou=groupa,ou=userlist,dc=furyu,dc=local
Order : 1
GpoId : 72e4f0a0-7b01-4944-9fba-6ad14faefb49
DisplayName : GPOtest2
Enabled : True
Enforced : False
Target : ou=groupa,ou=userlist,dc=furyu,dc=local
Order : 2
PS > Get-ADOrganizationalUnit -Filter 'Name -like "*"'これで全OUを取り出せるので、このオブジェクト群を変数にいれてしまいます。
City :
Country :
DistinguishedName : OU=Domain Controllers,DC=furyu,DC=local
LinkedGroupPolicyObjects : {CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Polici
es,CN=System,DC=furyu,DC=local}
ManagedBy :
Name : Domain Controllers
ObjectClass : organizationalUnit
ObjectGUID : ee6dfe99-a1f5-4579-b810-d12d22fcdfff
PostalCode :
State :
StreetAddress :
:
PS > $oulist=Get-ADOrganizationalUnit -Filter 'Name -like "*"'では、この変数を利用してリンクが貼られているOUとそのGPOを出してみましょう。
PS > $oulist | % { Get-GPInheritance -target $_ } | ? { $_.gpolinks -ne "" } | fl -Property path,gpolinks
Path : ou=domain controllers,dc=furyu,dc=local
GpoLinks : {Default Domain Controllers Policy}
Path : ou=groupa,ou=userlist,dc=furyu,dc=local
GpoLinks : {GPOtest1, GPOtest2}
Path : ou=groupb,ou=userlist,dc=furyu,dc=local
GpoLinks : {GPOtest2, GPOtest3, GPOtest1, GPOtest4}
HKEY_CURRENT_USER\So ftware\Mic rosoft\Win dows\CurrentVer sion\Polic ies\Explor er
ClassicShell DWORD値
ユーザー構成をコンピュータごとに設定するには、次の手順を実行します。3回に分けて描きましたが、いずれにせよ、どうGPOを管理するかがポイントだと思います。
- グループ ポリシー Microsoft 管理コンソール (MMC) で [コンピュータの構成] を展開します。
- [管理用テンプレート]、[システム] を順に展開し、[グループ ポリシー] をクリックし、[ユーザー グループ ポリシー ループバックの処理モード] を有効にします。