2016-08-12 78 views
1

我使用Powershell顯示所有組策略以及它們鏈接到的內容。這就要求GroupPolicy中模塊(導入模塊GroupPolicy中)和下面的腳本(信貸麥克Frobbins)完成正是我需要的,但在下面的格式輸出顯示:如何將數組變成多行?

「GPOName」,「LinksTo」 , 「已啓用」

「默認組策略」, 「服務器,計算機,得克薩斯州」, 「真的,真的,真的」

而且我需要它看起來像這樣:

「GPOName」, 「LinksTo」,「已啓用」

「默認組策略」,「服務器」,「真」
「默認組策略」,「計算機」,「真」
「默認組策略」,「得克薩斯」 「真」

任何幫助,將不勝感激。我一直試圖讓這個工作2天,我無法弄清楚。我發現其他文章已經涵蓋了這個主題,但解決方案似乎並不適用於這種方法。

function Get-GPOLink { 

[CmdletBinding()] 
param (
    [Parameter(Mandatory, 
       ValueFromPipeline, 
       ValueFromPipelineByPropertyName)] 
    [Alias('DisplayName')] 
    [string[]]$Name 
) 

PROCESS { 

    foreach ($n in $Name) {    
     $problem = $false 

     try { 
      Write-Verbose -Message "Attempting to produce XML report for GPO: $n" 

      [xml]$report = Get-GPOReport -Name $n -ReportType Xml -ErrorAction Stop 
     } 
     catch { 
      $problem = $true 
      Write-Warning -Message "An error occured while attempting to query GPO: $n" 
     } 

     if (-not($problem)) { 
      Write-Verbose -Message "Returning results for GPO: $n" 

      [PSCustomObject]@{ 
       'GPOName' = $report.GPO.Name 
       'LinksTo' = $report.GPO.LinksTo.SOMPath 
       'Enabled' = $report.GPO.LinksTo.Enabled 
      } 
     } 
    } 
} 
} 

回答

0

你可以換你[PSCustomObject]在一個循環迭代的SOMPath所有所有實例。

function Get-GPOLink { 

[CmdletBinding()] 
param (
    [Parameter(Mandatory, 
       ValueFromPipeline, 
       ValueFromPipelineByPropertyName)] 
    [Alias('DisplayName')] 
    [string[]]$Name 
) 

PROCESS { 

    foreach ($n in $Name) {    
     $problem = $false 

     try { 
      Write-Verbose -Message "Attempting to produce XML report for GPO: $n" 

      [xml]$report = Get-GPOReport -Name $n -ReportType Xml -ErrorAction Stop 
     } 
     catch { 
      $problem = $true 
      Write-Warning -Message "An error occured while attempting to query GPO: $n" 
     } 

     if (-not($problem)) { 
      Write-Verbose -Message "Returning results for GPO: $n" 

      ForEach ($LinkTo in $report.GPO.LinksTo) { 
       [PSCustomObject]@{ 
        'GPOName' = $report.GPO.Name 
        'LinksTo' = $LinkTo.SOMPath 
        'Enabled' = $LinkTo.Enabled 
       } 
      } 
     } 
    } 
} 
} 

編輯:更新通過LinksTo記錄重複,以避免多次啓用響應。

+0

你可能剛剛度過了我的一天。這工作,但現在「啓用」列在兩條線上顯示「真實」。是否有辦法在適當的行上僅顯示「已啓用」列中的相應項目? – Ric

+0

你會驚訝於這裏的答案是一個簡單的解決方案,以解決某個人過度思考的問題:) – TheMadTechnician