
рдкреНрд░рд╢рд╛рд╕рди рдХреЗ рд▓рд┐рдП рдкреЙрд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╖рдп рдЕрддреНрдпрдВрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЗрдЦ рд╣реИрдмреЗ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЬреЗрдлрд░реА рд╣рд┐рдХреНрд╕
рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдкрд┐рдЫрд▓рд╛
рдЕрдиреБрд╡рд╛рдж , рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдХреА рд▓рд╣рд░ рдереАред рдФрд░ рдЯреЗрдХрдИрдб рдиреЙрд░реНрде рдЕрдореЗрд░рд┐рдХрд╛ 2012 рдореЗрдВ рдПрдХ рд╣реА рд▓реЗрдЦрдХ рдХреЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХреИрд╕реЗ рдпрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЗрдлрд░реА рд╣рд┐рдХреНрд╕ рдиреЗ рдЬреЗрд░реЗрдореА рдореЛрд╕реНрдХреЛрд╡рд┐рдЯреНрдЬ рдХреЗ рд╕рд╛рде рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХреА, рд╡рд╣ рд╕рдореВрд╣ рдиреАрддрд┐ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдереАред рдореВрд▓ рд╕рд╛рдордЧреНрд░реА (рд╡реАрдбрд┐рдпреЛ)
рдпрд╣рд╛рдБ рд╣реИ , рд▓реЗрдХрд┐рди рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рд╛рдордЧреНрд░реА + рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрд╡рдпрдВ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
рд░рд┐рдкреЛрд░реНрдЯ рджреЛ рдореБрджреНрджреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ:
- рд╕рдореВрд╣ рдиреАрддрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рддрд╛ рд╣реИ
- рд╕рдореВрд╣ рдиреАрддрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╡рд┐рд╡рд░рдг - рдХрдЯреМрддреА рдХреЗ рддрд╣рддред
рд╣рдо рд╕рдореВрд╣ рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?
рд╕рдореВрд╣ рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреНрд░рдо:
- рдЖрдпрд╛рдд рд╕рдореВрд╣ рдиреАрддрд┐ рдореЙрдбреНрдпреВрд▓ (рдЖрдпрд╛рдд-рдореЙрдбреНрдпреВрд▓ GroupPolicy)
- PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GPO рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (GPO PowerShell рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ)
- рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдВ
- рд╕рдореВрд╣ рдиреАрддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ HTML / XML рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛
- рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП XML рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдо рдФрд░ рдЦреЛрдЬ
- Select-XML рдФрд░ Xpath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЛрдЬреЗрдВ
рд╕рдореВрд╣ рдиреАрддрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдБ
рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 1ред рдЖрдкрдХреЛ рд╕рдореВрд╣ рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
PS C:\> Import-Module GroupPolicy PS C:\> Get-GPO JeremyGPO
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЗрд░реЗрдореАрдЬреАрдкреАрдУ рдХреЗ рдмрдЬрд╛рдп рдЬреАрдкреАрдУ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо (DisplayName) рдЦрдбрд╝рд╛ рд╣реИред рдпрд╣ рдкреНрд▓реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реИ
DisplayName : JeremyGPO DomainName : GLOBOMANTICS.local Owner : GLOBOMANTICS\Domain Admins Id : cd73c562-5bfe-40e2-b81e-28da10da425c GpoStatus : ComputerSettingsDisabled Description : CreationTime : 12/28/2011 2:52:37 PM ModificationTime : 5/21/2012 11:08:26 AM UserVersion : AD Version: 4, SysVol Version: 4 ComputerVersion : AD Version: 1, SysVol Version: 1 WmiFilter :
рд╕рдорд╛рдзрд╛рди: рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдПрдВредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд┐рдЫрд▓реЗ 30 рджрд┐рдиреЛрдВ рдореЗрдВ рдмрджрд▓реА рдЧрдИ рд╕рднреА рд╕рдореВрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рддреАрди рдореВрд▓реНрдпреЛрдВ (рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо, рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдордп, рд╡рд┐рд╡рд░рдг) рдХреЗ рд╕рд╛рде рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо (рдЕрдВрддрд┐рдо рдореЗрдВ рд╕рдмрд╕реЗ рдКрдкрд░) рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХ .csv рдлрд╝рд╛рдЗрд▓ (GPOModReport.csv рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ) рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ PowerShell рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
PS C:\> get-gpo -all | Where {$_.ModificationTime -gt (Get-Date).AddDays(-30)} ... | Sort ModificationTime -Descending | Where {$_.ModificationTime -ge (Get-Date).AddDays(-30)} | Select Displayname,ModificationTime,Description ... | Export-CSV R:\GPOModReport.csv
рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдорд╛рдВрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг # PS C:\>get-gpo -all | Sort CreationTime,Modificationtime | Select Displayname,*Time
# , 30 PS C:\>get-gpo -all | Where {$_.ModificationTime -ge (Get-Date).AddDays(-30)}
# (Defaul Domain Policy) PS C:\>Get-GPOReport -name "Default Domain Policy" -ReportType HTML -Path "c:\work\ddp.htm" invoke-item "c:\work\ddp.htm"
# PS C:\>Get-GPOReport -All -ReportType HTML -Path "c:\work\allgpo.htm" invoke-item "c:\work\allgpo.htm"
# # _ GPO PS C:\>Get-GPO -all | foreach { $f="{0}.htm" -f ($_.Displayname).Replace(" ","_") $htmfile=Join-Path -Path "C:\work" -ChildPath $f Get-GPOReport -Name $_.Displayname -ReportType HTML -Path $htmfile Get-Item $htmfile }
рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 2ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬреАрдкреАрдУ рдЬреЛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп: рдЦрд╛рд▓реА GPO рдЦреЛрдЬреЗрдВ
- рдмрд┐рдирд╛ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЧреНрд░реБрдк рдкреЙрд▓рд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
- XML ExtensionData рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ
PS C:\> Import-Module GroupPolicy PS C:\> [xml]$r = Get-GPOReport -Name MyGPO -ReportType XML PS C:\> if ((-Not $r.gpo.user.extensiondata) -AND (-not $r.gpo.computer.extensiondata)) { "GPO is empty" }
рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреАрдореЗрдВ #requires -version 2.0 #find empty gpos in the domain Function Get-EmptyGPO { Param ( [Parameter(Position=0,ValueFromPipeline=$True, ValueFromPipelinebyPropertyName=$True)] [string]$DisplayName ) Begin { #import the GroupPolicy Module Import-Module GroupPolicy } Process { #create an XML report [xml]$report=Get-GPOReport -Name $displayname -ReportType XML #totally empty if ((-Not $report.gpo.user.extensiondata) -AND (-not $report.gpo.computer.extensiondata)) { #no extension data so write Get-GPO -Name $Displayname } } #process End {} } #function Function Test-EmptyGPO { Param ( [Parameter(Position=0,ValueFromPipeline=$True, ValueFromPipelinebyPropertyName=$True)] [string]$DisplayName ) Begin { #import the GroupPolicy Module Import-Module GroupPolicy } Process { #set default values $User=$False $Computer=$False #create an XML report [xml]$report=Get-GPOReport -Name $displayname -ReportType XML if ($report.gpo.user.extensiondata) { $User=$True } If ( $report.gpo.computer.extensiondata) { $Computer=$True } #write a custom object to the pipeline New-Object -TypeName PSObject -Property @{ Displayname=$report.gpo.name UserData=$User ComputerData=$Computer } } #Process End {} } #function #Get-GPO -All | Get-EmptyGPO #Get-GPO -All | Test-EmptyGPO
рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 3ред
GPO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕рдиреЗ рдХрд┐рдпрд╛?
рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ GPO рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдзреА рдкреЙрд▓рд┐рд╕реА рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЧрдИ рд╣реИ ("рдХреНрдпрд╛ рдХреЛрдИ GPOs 'рдЖрдзреА' рдкреЙрд▓рд┐рд╕реА рдЕрдХреНрд╖рдо рд╣реИ?)
рдХреНрдпрд╛ рдХреЛрдИ GPO рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдиреАрддрд┐рдпрд╛рдБ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИрдВ ("рдХреНрдпрд╛ рдХреЛрдИ GPOs 'рд╕рднреА' рдиреАрддрд┐ рдХреЗ рд╕рд╛рде рд╣реИрдВ?")
рд╣рдо GPO (GPOStatus) рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рддреАрди рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддреАрди рдЯреАрдореЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:
PS C:\> get-gpo -all | Sort GPOStatus | format-table -GroupBy GPOStatus Displayname,*Time PS C:\> get-gpo -all | where {$_.GPOStatus -match "disabled"} | Select GPOStatus,Displayname PS C:\> get-gpo -all | where {$_.GPOStatus -match "AllSettingsDisabled"}
рд╕рдореВрд╣ рдиреАрддрд┐ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 4ред рд▓рд┐рдВрдХ рдХреЗ рдмрд┐рдирд╛ рдЬреАрдкреАрдУ рдХреА рдЦреЛрдЬ
PS C:\> Import-Module ActiveDirectory Get-ADOrganizationalUnit -filter * | select-object -ExpandProperty DistinguishedName | get-adobject -prop gplink | where {$_.gplink} | Select-object -expand gplink | foreach-object { foreach ($item in ($_.Split("]["))) { $links+=$regex.match($item).Value } } Get-GPO -All | Where {$links -notcontains $_.id}
рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреАрдореЗрдВ #requires -version 2.0 <# Find unlinked GPOs. This requires the Active Directory Module This version does not query for site links #> Import-Module ActiveDirectory,GroupPolicy #GUID regular expression pattern [Regex]$RegEx = "(([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12})" #create an array of distinguishednames $dn=@() $dn+=Get-ADDomain | select -ExpandProperty DistinguishedName $dn+=Get-ADOrganizationalUnit -filter * | select -ExpandProperty DistinguishedName $links=@() #get domain and OU links foreach ($container in $dn) { #pull the GUID and add it to the array of links get-adobject -identity $container -prop gplink | where {$_.gplink} | Select -expand gplink | foreach { #there might be multiple GPO links so split foreach ($item in ($_.Split("]["))) { $links+=$regex.match($item).Value } #foreach item } #foreach } #foreach container #$links <# get all gpos where the ID doesn
рд╕рдорд╕реНрдпрд╛ 5. рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдореВрд╣ рдиреАрддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ ("рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕")рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
#Use Xpath with the XML report data PS C:\> [xml]$report = Get-GPOReport -Name MyGPO -ReportType XML PS C:\> $ns = @{q3 = "http://www.microsoft.com/GroupPolicy/Settings/Registry"} PS C:\> $nodes = Select-Xml -Xml $report -Namespace $ns -XPath "//q3:RegistrySetting" | select -expand Node | Where {$_.AdmSetting -eq
рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреАрдореЗрдВ #requires -version 2.0 #find GPOs with extra registry, ie non-ADM settings Function Test-GPOExtraRegistry { Param ( [Parameter(Position=0,ValueFromPipeline=$True, ValueFromPipelinebyPropertyName=$True)] [string]$DisplayName ) Begin { #import the GroupPolicy Module Import-Module GroupPolicy } Process { #create an XML report [xml]$report=Get-GPOReport -Name $displayname -ReportType XML #define the XML namespace $ns=@{q3="http://www.microsoft.com/GroupPolicy/Settings/Registry"} $nodes=Select-Xml -Xml $report -Namespace $ns -XPath "//q3:RegistrySetting" | select -expand Node | Where {$_.AdmSetting -eq
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдордиреЗ рдХреЗрд╡рд▓ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╕реВрдЦреЗ рдЕрд╡рд╢реЗрд╖реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдерд╛ред рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдмреЛрдирд╕:
рд╕рдореВрд╣ рдиреАрддрд┐ рд░рд┐рдкреЛрд░реНрдЯ
рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рдЖрдк рд╣рдорд╛рд░реЗ
рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдЧреНрд░реБрдк рдкреЙрд▓рд┐рд╕реА рдЪреЗрдВрдЬ рд░рд┐рдкреЛрд░реНрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред