Private/Connect-SiteServer.ps1

<#
.Synopsis
Created on: 26/10/2023
Updated on: 17/02/2024
Created by: Ben Whitmore
Filename: Connect-SiteServer.ps1
 
.Description
Function to connect to a Site Server
 
.PARAMETER LogID
The component (script name) passed as LogID to the 'Write-Log' function.
This parameter is built from the line number of the call from the function up the pipeline
 
.PARAMETER SiteCode
The Site Code of the Site Server to connect to
The Site Code must be only 3 alphanumeric characters
 
.PARAMETER ProviderMachineName
The Server name that has an SMS Provider site system role
 
.EXAMPLE
Connect-SiteServer -SiteCode "ABC" -ProviderMachineName "ABC-SMS01.contoso.local"
#>

function Connect-SiteServer {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false, ValuefromPipeline = $false, HelpMessage = "The component (script name) passed as LogID to the 'Write-Log' function")]
        [string]$LogId = $($MyInvocation.MyCommand).Name,
        [Parameter(Mandatory = $true, ValueFromPipeline = $false, Position = 0, HelpMessage = 'The Site Code of the ConfigMgr Site')]
        [ValidatePattern('(?##The Site Code must be only 3 alphanumeric characters##)^[a-zA-Z0-9]{3}$')]
        [String]$SiteCode,
        [Parameter(Mandatory = $true, ValueFromPipeline = $false, Position = 1, HelpMessage = "Server name that has an SMS Provider site system role")]
        [String]$ProviderMachineName
    )

    begin {
        Write-Log -Message "Function: Connect-SiteServer was called" 
        Write-Log -Message "Import-Module `$ENV:SMS_ADMIN_UI_PATH\..\ConfigurationManager.psd1"
        Write-Host ("Importing Module: 'ConfigurationManager.psd1' and connecting to Provider '{0}'..." -f $ProviderMachineName) -ForegroundColor Cyan
    }
    
    process {

        # Import the ConfigurationManager.psd1 module
        try {
            if (-not (Get-Module ConfigurationManager)) {
                Import-Module "$($ENV:SMS_ADMIN_UI_PATH)\..\ConfigurationManager.psd1" -Verbose:$false
            }
        }
        catch {
            Write-Log -Message "Warning: Could not import the ConfigurationManager.psd1 Module"
            Write-Warning "Warning: Could not import the 'ConfigurationManager.psd1' module"
            Write-Log -Message ("'{0}'" -f $_.Exception.Message) -LogId $LogId -Severity 3
            Get-ScriptEnd -LogId $LogId -ErrorMessage $_.Exception.Message
    }

        # Check the SMS Provider is valid
        if ( -not ( $ProviderMachineName -eq (Get-PSDrive -ErrorAction SilentlyContinue | Where-Object { $_.Provider -like "*CMSite*" }).Root ) ) {
            Write-Log -Message ("Could not connect to the Provider '{0}'" -f $ProviderMachineName) -Severity 3
            Write-Warning ("Could not connect to the Provider '{0}' `nDid you specify the correct Site System?" -f $ProviderMachineName)
            Write-Log -Message ("'{0}'" -f $_.Exception.Message) -LogId $LogId -Severity 3
            Get-ScriptEnd -LogId $LogId -ErrorMessage $_.Exception.Message
        }
        else {
            Write-Log -Message ("Connected to provider {0} at site '{1}'" -f $ProviderMachineName, $SiteCode )
            Write-Host ("Connected to provider '{0}'" -f $ProviderMachineName) -ForegroundColor Green
        }

        # Connect to the site drive if it is not already present
        try {
            if (!($SiteCode -eq ( Get-PSDrive -ErrorAction SilentlyContinue | Where-Object { $_.Provider -like "*CMSite*" }).Name) ) {
                Write-Log -Message ("No PSDrive found for '{0}' in PSProvider CMSite for Root '{1}'" -f $SiteCode, $ProviderMachineName) -LogId $LogId -Severity 3
                Write-Warning ("No PSDrive found for '{0}' in PSProvider CMSite for Root '{1}'. Did you specify the correct Site Code?" -f $SiteCode, $ProviderMachineName)
                Get-ScriptEnd -LogId $LogId -ErrorMessage $_.Exception.Message

            }
            else {
                Write-Log -Message ("Connected to PSDrive '{0}'" -f $SiteCode) -LogId $LogId
                Write-Host ("Connected to PSDrive '{0}'" -f $SiteCode) -ForegroundColor Green 
                Set-Location "$($SiteCode):\"
            }
        }
        catch {
            Write-Log -Message ("Warning: Could not connect to the specified provider '{0}' at site '{1}'" -f $ProviderMachineName, $SiteCode) -LogId $LogId -Severity 3
            Write-Warning ("Warning: Could not connect to the specified provider '{0}' at site '{1}'" -f $ProviderMachineName, $SiteCode)
            Get-ScriptEnd -ErrorMessage $_.Exception.Message -LogId $LogId 
        }
    }
}