Private/New-StmCimSession.ps1
function New-StmCimSession { [CmdletBinding(SupportsShouldProcess = $true)] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $ComputerName, [Parameter(Mandatory = $false)] [ValidateNotNull()] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential = [System.Management.Automation.PSCredential]::Empty ) begin { Write-Verbose "Starting New-StmCimSession for computer '$ComputerName'" $cimSessionParameters = @{ ComputerName = $ComputerName ErrorAction = 'Stop' } if ($Credential -ne [System.Management.Automation.PSCredential]::Empty) { Write-Verbose "Using provided credentials for CIM session on '$ComputerName'" $cimSessionParameters['Credential'] = $Credential } else { Write-Verbose "Using current credentials for CIM session on '$ComputerName'" } } process { if ($PSCmdlet.ShouldProcess($ComputerName, 'Create CIM session')) { try { Write-Verbose "Creating CIM session to '$ComputerName'..." New-CimSession @cimSessionParameters } catch { $errorRecordParameters = @{ Exception = $_.Exception ErrorId = 'CimSessionCreationFailed' ErrorCategory = [System.Management.Automation.ErrorCategory]::ConnectionError TargetObject = $ComputerName Message = "Failed to create CIM session to '$ComputerName'. $($_.Exception.Message)" RecommendedAction = ( "Verify the computer name '$ComputerName' is correct, the target computer is accessible, " + 'and you have appropriate permissions. If using credentials, verify they are valid for ' + 'the target computer.' ) } $errorRecord = New-StmError @errorRecordParameters $PSCmdlet.ThrowTerminatingError($errorRecord) } } } end { Write-Verbose "Completed New-StmCimSession for computer '$ComputerName'" } } |