ContainerHandling/Get-NavContainerSession.ps1
<#
.Synopsis Get (or create) a PSSession for a NAV/BC Container .Description Checks the session cache for an existing session. If a session exists, it will be reused. If no session exists, a new session will be created. .Parameter containerName Name of the container for which you want to create a session .Parameter silent Include the silent switch to avoid the welcome text .Example $session = Get-BcContainerSession -containerName bcserver PS C:\>Invoke-Command -Session $session -ScriptBlock { Set-NavServerInstance -ServerInstance $ServerInstance -restart } #> function Get-BcContainerSession { [CmdletBinding()] Param ( [string] $containerName = $bcContainerHelperConfig.defaultContainerName, [switch] $silent ) Process { if ($sessions.ContainsKey($containerName)) { $session = $sessions[$containerName] try { $ok = Invoke-Command -Session $session -ScriptBlock { $true } return $session } catch { Remove-PSSession -Session $session $sessions.Remove($containerName) } } $containerId = Get-BcContainerId -containerName $containerName $so = New-PSSessionOption -IdleTimeout $bcContainerHelperConfig.PsSessionTimeout $session = New-PSSession -ContainerId $containerId -RunAsAdministrator -SessionOption $so Invoke-Command -Session $session -ScriptBlock { Param([bool]$silent) $ErrorActionPreference = 'Stop' $runPath = "c:\Run" $myPath = Join-Path $runPath "my" function Get-MyFilePath([string]$FileName) { if ((Test-Path $myPath -PathType Container) -and (Test-Path (Join-Path $myPath $FileName) -PathType Leaf)) { (Join-Path $myPath $FileName) } else { (Join-Path $runPath $FileName) } } . (Get-MyFilePath "prompt.ps1") -silent:$silent | Out-Null . (Get-MyFilePath "ServiceSettings.ps1") | Out-Null . (Get-MyFilePath "HelperFunctions.ps1") | Out-Null $txt2al = "" if ($roleTailoredClientFolder) { $txt2al = Join-Path $roleTailoredClientFolder "txt2al.exe" if (!(Test-Path $txt2al)) { $txt2al = "" } } Set-Location $runPath } -ArgumentList $silent $sessions.Add($containerName, $session) return $session } } Set-Alias -Name Get-NavContainerSession -Value Get-BcContainerSession Export-ModuleMember -Function Get-BcContainerSession -Alias Get-NavContainerSession |