Initial commit of more scripts
This commit is contained in:
1 parent
141a001806
commit
6b9468d796
6 files changed
+602
No files matched your search
@@ -0,0 +1,161 @@
|
||||
##
|
||||
## KISGPOExport.ps1 - Export GPOs for an OU to file
|
||||
##
|
||||
## Created by Charlie Silverman - Keep IT Simple
|
||||
##
|
||||
## Version History:
|
||||
## 1.1.0 - Added history
|
||||
## 1.5.0 - Changed to put exported GPOs into a subfolder based on the OU name.
|
||||
## 2.0.0 - Added functionality to process all parent OUs. Added help function.
|
||||
|
||||
param (
|
||||
[switch]$Help = $false,
|
||||
[switch]$Parents = $false
|
||||
)
|
||||
|
||||
function prettyPrintOU($ou) {
|
||||
$myparts = $ou.split("/")
|
||||
$result = ""
|
||||
for ($counter = $myparts.length - 1; $counter -gt 0; --$counter) {
|
||||
$result += "OU=" + $myparts[$counter] + ","
|
||||
}
|
||||
$domainparts = $myparts[0].split(".")
|
||||
for ($counter = 0; $counter -lt $domainparts.length; ++$counter) {
|
||||
$result += "DC=" + $domainparts[$counter]
|
||||
if ($counter -lt $domainparts.length - 1) { $result += "," }
|
||||
}
|
||||
return $result
|
||||
}
|
||||
|
||||
$ScriptName = $MyInvocation.MyCommand.Path
|
||||
$ScriptDate = Get-Item $ScriptName | select LastWriteTime
|
||||
$ScriptDate = $ScriptDate.LastWriteTime
|
||||
$ScriptVersion = "2.0.0"
|
||||
|
||||
Write-Host "`r`n"
|
||||
Write-Host "--------------------------------------------------------------" -ForegroundColor Gray
|
||||
Write-Host " KISGPOExport.ps1" -ForegroundColor Green -NoNewLine
|
||||
Write-Host " - Group Policy Export Script" -ForegroundColor White
|
||||
Write-Host " Version $ScriptVersion - $ScriptDate" -ForegroundColor White
|
||||
Write-Host " Written by" -ForegroundColor White -NoNewLine
|
||||
Write-Host " Charlie Silverman - Keep IT Simple" -ForegroundColor Green
|
||||
Write-Host "--------------------------------------------------------------" -ForegroundColor Gray
|
||||
if ($Help) {
|
||||
Write-Host
|
||||
Write-Host "Purpose: Export Group Policy Objects to HTML for a given OU."
|
||||
Write-Host "Command Syntax:"
|
||||
Write-Host " KISGPOExport.ps1 (-parents) (-help)`n" -foregroundcolor green
|
||||
Write-Host "Command Line Options:"
|
||||
Write-Host
|
||||
Write-Host -NoNewLine " -parents " -foregroundcolor Green
|
||||
Write-Host "- Export GPOs for all parent OUs as well."
|
||||
Write-Host -NoNewLine " -help " -foregroundcolor Green
|
||||
Write-Host "- Display command help."
|
||||
}
|
||||
|
||||
$OUList = Get-ADOrganizationalUnit -Filter * -Properties CanonicalName | Select-Object CanonicalName | Sort-Object -Property CanonicalName
|
||||
$prev = ""
|
||||
$depth = 1
|
||||
$domainname = $OUList[0].CanonicalName.split("/")[0]
|
||||
$lastpos = 5
|
||||
$toppos = 1
|
||||
$selected = 0
|
||||
$displaypage = 25
|
||||
$datestamp = Get-Date -Format FileDate
|
||||
#$bottompos = $toppos + 19
|
||||
while ($selected -eq 0) {
|
||||
Write-Host "`nSelect an OU to scan for linked GPOs:`n"
|
||||
Write-Host "Domain: $domainname"
|
||||
For ($x = $toppos-1; $x -lt $toppos + $displaypage - 1; $x++) {
|
||||
if ($x -ge $OUList.length) { break }
|
||||
$thisOU = $OUList[$x].CanonicalName
|
||||
$OUParts = $thisOU.split("/");
|
||||
$spacing = " |" * ($OUParts.length - 2)
|
||||
$spacing = "$spacing |__"
|
||||
if ($depth -lt $OUParts.length - 1) {
|
||||
$spacing = " |" * ($OUParts.length - 2)
|
||||
$spacing += " |__"
|
||||
}
|
||||
$position = ([string]($x+1)).PadLeft(3) + ":"
|
||||
Write-Host $position -NoNewLine -ForegroundColor Yellow
|
||||
Write-Host "$spacing $($OUParts[$OUParts.length - 1])"
|
||||
# for ($y = 1; $y -lt $OUParts.length; $y++ {
|
||||
$depth = $OUParts.length
|
||||
}
|
||||
$selected = Read-Host -Prompt 'Select line number or P for Previous page, N for next page, or Q to quit [N]'
|
||||
switch($selected.toLower()) {
|
||||
"n" {
|
||||
if ($toppos + $displaypage -lt $OUList.length) {
|
||||
$toppos += $displaypage
|
||||
if ($toppos -gt $OUList.length) { $toppos = $OUList.length - 1 }
|
||||
}
|
||||
$selected = 0
|
||||
}
|
||||
"p" {
|
||||
$toppos -= $displaypage
|
||||
if ($toppos -lt 1) { $toppos = 1 }
|
||||
$selected=0
|
||||
}
|
||||
"q" {
|
||||
exit
|
||||
}
|
||||
}
|
||||
try {
|
||||
$selected = [int]$selected
|
||||
} catch {
|
||||
$selected = 0
|
||||
}
|
||||
}
|
||||
|
||||
$selectedOU = prettyPrintOU($OUList[$selected-1].CanonicalName)
|
||||
While (([regex]::Matches($selectedOU, "," )).count -gt 1) {
|
||||
Write-Host "`n`nProcessing GPOs in $selectedOU`n"
|
||||
$myou = Get-ADOrganizationalunit $selectedOU
|
||||
$CNParts = $selectedOU.split(",")
|
||||
$folderpath = "";
|
||||
for ($x = $CNParts.length - 1; $x -ge 0; --$x) {
|
||||
$folderpath = "$folderpath\$($CNParts[$x])"
|
||||
}
|
||||
if (-not (Test-Path -Path "$pwd$folderpath")) {
|
||||
$result = New-Item -ItemType Directory -Path "$pwd$folderpath"
|
||||
}
|
||||
$gpolist = $myou | Select-Object -ExpandProperty LinkedGroupPolicyObjects
|
||||
$x = 1
|
||||
if ($gpolist -is [string]) {
|
||||
$gpoguid = $gpolist.split("}")[0].split("{")[1]
|
||||
try {
|
||||
$thisgpo = Get-GPO -Guid $gpoguid
|
||||
Write-Host "Exporting GPO " -NoNewLine -ForegroundColor DarkGray
|
||||
Write-Host $thisgpo.DisplayName -NoNewLine
|
||||
Write-Host "..." -NoNewLine -ForegroundColor DarkGray
|
||||
Get-GPOReport -Guid $gpoguid -ReportType 'HTML' -Path "$pwd\$domainname - $($thisgpo.DisplayName) - 20230530.html"
|
||||
Write-Host " Complete" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "ERROR PROCESSING"
|
||||
}
|
||||
} else {
|
||||
Write-Host "There are a total of $($gpolist.length) GPOs linked to $selectedOU"
|
||||
for ($x = 0; $x -lt $gpolist.length; ++$x) {
|
||||
$thisgpo = [string]$gpolist[$x]
|
||||
$gpoguid = $thisgpo.split("}")[0].split("{")[1]
|
||||
try {
|
||||
$thisgpo = Get-GPO -Guid $gpoguid
|
||||
Write-Host "Exporting GPO " -NoNewLine -ForegroundColor DarkGray
|
||||
Write-Host $thisgpo.DisplayName -NoNewLine
|
||||
Write-Host "..." -NoNewLine -ForegroundColor DarkGray
|
||||
|
||||
Get-GPOReport -Guid $gpoguid -ReportType 'HTML' -Path "$pwd$folderpath\$domainname - $($thisgpo.DisplayName) - $datestamp.html"
|
||||
Write-Host " Complete" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "ERROR PROCESSING"
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($Parents) {
|
||||
$selectedOU = ($myou.distinguishedname -split ',', 2)[1]
|
||||
} else {
|
||||
$selectedOU = ""
|
||||
}
|
||||
}
|
||||
Write-Host "`nOperation complete."
|
||||
Write-Host "$x policies exported to HTML and stored in $pwd$folderpath"
|
||||
Reference in new issue
Block a user