powershell 解析通过Get-GPResultantSetofPolicy获取的XML GPO报告

xkrw2x1b  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(183)

我设法使用Get-GPOReport将特定GPO的配置导出为XML,然后使用PowerShell在其中导航以查找用户权限分配。
我正在尝试使用Get-GPResultantSetOfPolicy对RSOP数据执行类似的操作

Get-GPResultantSetOfPolicy -computer localhost -ReportType Xml -path "C:\temp\RSOP.xml"
[xml]$Xml = gc "C:\temp\RSOP.xml"
$xml.rsop.ComputerResults.ExtensionData.extension

第三行给出了下面的结果,但从这里我不知道如何获得用户权限分配。

如果我将XML导入到XML记事本中,它会显示以下内容:

我想过滤掉除5个拒绝权限(SeDenyNetworkLogonRight、SeDenyBatchLogonRight、SeDenyServiceLogonRight、SeDenyInteractiveLogonRight、SeDenyRemoteInteractive veLogonRight)之外的所有权限,并获取被授予此权限的帐户的名称(例如,Guest和服务)

f45qwnt8

f45qwnt81#

与直接解析报告相比,利用MS PowershellGallery.com中的以下任何模块来帮助您的用例如何?

Find-Module -Name '*gpo*'

Find-Module -Name '*userrights*'

Find-Module -Name '*privil*'

或者像这样只得到你想要的东西:

$String = 'SeDenyNetworkLogonRight|SeDenyBatchLogonRight|SeDenyServiceLogonRight'
$Domain = $env:USERDNSDOMAIN

$NearestDC = (Get-ADDomainController -Discover -NextClosestSite).Name

# Get a list of GPOs from the domain

Get-GPO -All -Domain $Domain -Server $NearestDC | 
Sort-Object DisplayName | 

# Go through each Object and check its XML against $String

Foreach {
  Write-Host "Working on $($PSItem.DisplayName)"

  #Get Current GPO Report (XML)
  $CurrentGPOReport = Get-GPOReport -Guid $PSItem.Id -ReportType Xml -Domain $Domain -Server $NearestDC

  If ($CurrentGPOReport -match $String)  {
    Write-Host "A Group Policy matching ""$($String)"" has been found:" -Foregroundcolor Green
    Write-Host "-  GPO Name: $($PSItem.DisplayName)" -Foregroundcolor Green
    Write-Host "-  GPO Id: $($PSItem.Id)" -Foregroundcolor Green
    Write-Host "-  GPO Status: $($PSItem.GpoStatus)" -Foregroundcolor Green
  }

}
aiazj4mn

aiazj4mn2#

$xml.rsop.ComputerResults.ExtensionData.extension.userrightsassignment | ? name -like "*deny*" | select name, @{label='entity';expression={$_.member.name.'#text'}}

相关问题