Public/Get-ADSIForest.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function Get-ADSIForest
{
<#
 .SYNOPSIS
  Function to retrieve the current or specified forest
  
 .DESCRIPTION
  Function to retrieve the current or specified forest
  
 .PARAMETER Credential
  Specifies alternative credential to use
  
 .PARAMETER ForestName
  Specifies the ForestName to query
  
 .EXAMPLE
  Get-ADSIForest
  
 .EXAMPLE
  Get-ADSIForest -ForestName lazywinadmin.com
  
 .EXAMPLE
  Get-ADSIForest -Credential (Get-Credential superAdmin) -Verbose
  
 .EXAMPLE
  Get-ADSIForest -ForestName lazywinadmin.com -Credential (Get-Credential superAdmin) -Verbose
  
 .OUTPUTS
  System.DirectoryServices.ActiveDirectory.Forest
  
 .NOTES
  Francois-Xavier Cat
  LazyWinAdmin.com
  @lazywinadm
  github.com/lazywinadmin
#>

    
    [CmdletBinding()]
    [OutputType('System.DirectoryServices.ActiveDirectory.Forest')]
    param
    (
        [Alias("RunAs")]
        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential = [System.Management.Automation.PSCredential]::Empty,
        
        $ForestName = [System.DirectoryServices.ActiveDirectory.Forest]::Getcurrentforest()
    )
    
    PROCESS
    {
        TRY
        {
            IF ($PSBoundParameters['Credential'] -or $PSBoundParameters['ForestName'])
            {
                Write-Verbose "[PROCESS] Credential or FirstName specified"
                $Splatting = @{ }
                IF ($PSBoundParameters['Credential']) { $Splatting.Credential = $Credential }
                IF ($PSBoundParameters['ForestName']) { $Splatting.ForestName = $ForestName }
                
                $ForestContext = New-ADSIDirectoryContext @splatting
                [System.DirectoryServices.ActiveDirectory.Forest]::GetForest($ForestContext)
            }
            ELSE
            {
                [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
            }
            
        }
        CATCH
        {
            Write-Warning -Message "[PROCESS] Something wrong happened!"
            Write-Warning -Message $error[0].Exception.Message
        }
    }
}