Private/RSOP/_GetRSOP.ps1
Function _GetRSOP { param ( [Parameter(Mandatory = $true)] [Parameter(ParameterSetName = 'Listing', Mandatory = $true)] [ValidateSet('HTML', 'Listing')] [string]$ReportType, [Parameter()] [Parameter(ParameterSetName = 'Listing')] # [ValidateScript( { Get-ADComputer $_ })] [string]$Identity = $env:COMPUTERNAME, [Parameter()] [Parameter(ParameterSetName = 'Listing')] # [ValidateScript( { Get-ADUser $_ })] [string]$User, [Parameter(Mandatory = $true)] [Parameter(ParameterSetName = 'Listing', Mandatory = $true)] # [ValidateScript( { Test-Path $_ })] [string]$Path, [Parameter(ParameterSetName = 'Listing', Mandatory = $false)] [PSCredential]$Credential ) begin { $CurrentTime = Get-Date -Format 'MMddyyyy_hhmm' if ($Credential) { $Pass = [Net.NetworkCredential]::new('', $Credential.Password).password } if ($User) { $File = "${Path}gpresult_${Identity}_${User}_${CurrentTime}." } else { $File = "${Path}gpresult_${Identity}_${CurrentTime}." } } process { switch ($ReportType) { 'HTML' { $File += 'html' if ($User) { Write-Verbose "Getting HTML report for $User" gpresult /S $Identity /H $File /Scope user /User $User } else { # No user defined, pull computer GPO report Write-Verbose "Getting HTML report for $Identity" gpresult /S $Identity /H $File /Scope computer } } 'Listing' { $File += 'txt' if ($Credential) { if ($User) { # User was defined so get User GPO Report Write-Verbose "Getting TXT report for $User" gpresult /S $Identity /R /Scope user /User $User /U $Credential.UserName /P $Pass > $File } else { # No user defined, pull computer GPO report Write-Verbose "Getting TXT report for $Identity" gpresult /S $Identity /R /Scope computer /U $Credential.UserName /P $Pass > $File } } else { if ($User) { # User was defined so get User GPO Report Write-Verbose "Getting TXT report for $User" gpresult /S $Identity /R /Scope user /User $User > $File } else { # No user defined, pull computer GPO report Write-Verbose "Getting TXT report for $Identity" gpresult /S $Identity /R /Scope computer > $File } } } } } end { # send back the file location and let the calling function deal with opening it. if (Test-Path $File) { return $File } else { # Don't change this text without updating the calling function! return 'Unable to create file.' } } } |