Skip to content

Commit 9db0c66

Browse files
authored
do not use winrm if not running (#3520)
Fixes #3518 Fixes #3519 --------- Co-authored-by: freddydk <[email protected]>
1 parent 83b96ae commit 9db0c66

6 files changed

+46
-22
lines changed

BC.HelperFunctions.ps1

+12-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ function Get-ContainerHelperConfig {
1616
"usePsSession" = $true
1717
"usePwshForBc24" = $true
1818
"useSslForWinRmSession" = $true
19-
"tryWinRmSession" = $isPsCore -or !$isAdministrator
20-
"alwaysUseWinRmSession" = $false
19+
"useWinRmSession" = "allow" # allow, always, never
2120
"addTryCatchToScriptBlock" = $true
2221
"killPsSessionProcess" = $false
2322
"useVolumes" = $false
@@ -192,6 +191,17 @@ function Get-ContainerHelperConfig {
192191
}
193192
}
194193

194+
if ($bcContainerHelperConfig.useWinRmSession -ne 'never') {
195+
# useWinRmSession should be never if the service isn't running
196+
$service = get-service WinRm -erroraction SilentlyContinue
197+
if ($service -and $service.Status -ne "Running") {
198+
if (!$Silent) {
199+
Write-Host "WinRM service is not running, will not try to use WinRM sessions"
200+
}
201+
$bcContainerHelperConfig.useWinRmSession = 'never'
202+
}
203+
}
204+
195205
Export-ModuleMember -Variable bcContainerHelperConfig
196206
}
197207
return $bcContainerHelperConfig

BcContainerHelper.psm1

+7-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ param(
1717
if ($isMacOS) {
1818
throw "BcContainerHelper isn't supported on MacOS"
1919
}
20-
elseif ($isLinux) {
21-
Write-Host "Running on Linux, PowerShell $($PSVersionTable.PSVersion)"
22-
}
23-
else {
24-
Write-Host "Running on Windows, PowerShell $($PSVersionTable.PSVersion)"
20+
elseif (!$silent) {
21+
if ($isLinux) {
22+
Write-Host "Running on Linux, PowerShell $($PSVersionTable.PSVersion)"
23+
}
24+
else {
25+
Write-Host "Running on Windows, PowerShell $($PSVersionTable.PSVersion)"
26+
}
2527
}
2628

2729
if ($useVolumes -or $isInsideContainer) {

ContainerHandling/Enter-NavContainer.ps1

+11-3
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,23 @@ function Enter-BcContainer {
1919

2020
Process {
2121
if ($bcContainerHelperConfig.usePsSession) {
22-
$session = Get-BcContainerSession -containerName $containerName -silent
22+
try {
23+
$session = Get-BcContainerSession -containerName $containerName -silent
24+
}
25+
catch {
26+
$session = $null
27+
}
28+
}
29+
if ($session) {
2330
Enter-PSSession -Session $session
2431
if ($session.ComputerType -eq 'Container') {
2532
Invoke-Command -Session $session -ScriptBlock {
2633
function prompt {"[$env:COMPUTERNAME]: PS5 $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "}
2734
}
2835
}
29-
} else {
30-
Write-Host "UsePsSession is false, running Open-BcContainer instead"
36+
}
37+
else {
38+
Write-Host "Could not create a session, running Open-BcContainer instead"
3139
Open-BcContainer $containerName
3240
}
3341
}

ContainerHandling/Get-NavContainerSession.ps1

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ function Get-BcContainerSession {
1616
[CmdletBinding()]
1717
Param (
1818
[string] $containerName = $bcContainerHelperConfig.defaultContainerName,
19-
[switch] $tryWinRmSession = $bccontainerHelperConfig.tryWinRmSession,
20-
[switch] $alwaysUseWinRmSession = $bccontainerHelperConfig.alwaysUseWinRmSession,
19+
[switch] $tryWinRmSession = ($bccontainerHelperConfig.useWinRmSession -ne 'never'),
20+
[switch] $alwaysUseWinRmSession = ($bccontainerHelperConfig.useWinRmSession -eq 'always'),
2121
[switch] $usePwsh = $bccontainerHelperConfig.usePwshForBc24,
2222
[switch] $silent,
2323
[switch] $reinit
@@ -60,7 +60,7 @@ function Get-BcContainerSession {
6060
if ($isInsideContainer) {
6161
$session = New-PSSession -Credential $bcContainerHelperConfig.WinRmCredentials -ComputerName $containerName -Authentication Basic -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)
6262
}
63-
elseif ($isAdministrator -and !$bcContainerHelperConfig.alwaysUseWinRmSession) {
63+
elseif ($isAdministrator -and !$alwaysUseWinRmSession) {
6464
try {
6565
$containerId = Get-BcContainerId -containerName $containerName
6666
$session = New-PSSession -ContainerId $containerId -RunAsAdministrator -ErrorAction SilentlyContinue -ConfigurationName $configurationName
@@ -69,12 +69,12 @@ function Get-BcContainerSession {
6969
}
7070
if (!$session) {
7171
if (!($alwaysUseWinRmSession -or $tryWinRmSession)) {
72-
throw "Unable to create session for container $containerName (alwaysUseWinRmSession and tryWinRmSession are both false)"
72+
throw "Unable to create session for container $containerName (cannot use WinRm)"
7373

7474
}
7575
$useSSL = $bcContainerHelperConfig.useSslForWinRmSession
76-
$UUID = (Get-CimInstance win32_ComputerSystemProduct).UUID
77-
$credential = New-Object PSCredential -ArgumentList 'winrm', (ConvertTo-SecureString -string $UUID -AsPlainText -force)
76+
$winRmPassword = "Bc$((Get-CimInstance win32_ComputerSystemProduct).UUID)!"
77+
$credential = New-Object PSCredential -ArgumentList 'winrm', (ConvertTo-SecureString -string $winRmPassword -AsPlainText -force)
7878
if ($useSSL) {
7979
$sessionOption = New-PSSessionOption -Culture 'en-US' -UICulture 'en-US' -SkipCACheck -SkipCNCheck
8080
$Session = New-PSSession -ConnectionUri "https://$($containerName):5986" -Credential $credential -Authentication Basic -SessionOption $sessionOption -ConfigurationName $configurationName

ContainerHandling/New-NavContainer.ps1

+8-5
Original file line numberDiff line numberDiff line change
@@ -496,9 +496,11 @@ try {
496496
if ($isInsideContainer) {
497497
Write-Host "BcContainerHelper is running inside a Container"
498498
}
499-
Write-Host "UsePsSession is $($bcContainerHelperConfig.UsePsSession)"
500-
Write-Host "UsePwshForBc24 is $($bcContainerHelperConfig.UsePwshForBc24)"
501499
Write-Host "Host is $($os.Caption) - $hostOsVersion"
500+
Write-Host "UsePsSession is $($bcContainerHelperConfig.usePsSession)"
501+
Write-Host "UsePwshForBc24 is $($bcContainerHelperConfig.usePwshForBc24)"
502+
Write-Host "UseWinRmSession is $($bcContainerHelperConfig.useWinRmSession)"
503+
Write-Host "UseSslForWinRmSession is $($bcContainerHelperConfig.useSslForWinRmSession)"
502504

503505
$dockerProcess = (Get-Process "dockerd" -ErrorAction Ignore)
504506
if (!($dockerProcess)) {
@@ -1598,15 +1600,16 @@ if (!$restartingInstance) {
15981600
}
15991601
') | Add-Content -Path "$myfolder\AdditionalSetup.ps1"
16001602
}
1601-
else {
1602-
$UUID = (Get-CimInstance win32_ComputerSystemProduct).UUID
1603+
elseif ($bcContainerHelperConfig.useWinRmSession -ne 'never') {
1604+
# UseWinRmSession is allow or always - add winrm configuration to container
1605+
$winRmPassword = "Bc$((Get-CimInstance win32_ComputerSystemProduct).UUID)!"
16031606
('
16041607
if (!$restartingInstance) {
16051608
Write-Host "Enable PSRemoting and setup user for winrm"
16061609
Enable-PSRemoting | Out-Null
16071610
Get-PSSessionConfiguration | Out-null
16081611
pwsh.exe -Command "Enable-PSRemoting -WarningAction SilentlyContinue | Out-Null; Get-PSSessionConfiguration | Out-Null"
1609-
$credential = New-Object PSCredential -ArgumentList "winrm", (ConvertTo-SecureString -string "'+$UUID+'" -AsPlainText -force)
1612+
$credential = New-Object PSCredential -ArgumentList "winrm", (ConvertTo-SecureString -string "'+$winRmPassword+'" -AsPlainText -force)
16101613
New-LocalUser -AccountNeverExpires -PasswordNeverExpires -FullName $credential.UserName -Name $credential.UserName -Password $credential.Password | Out-Null
16111614
Add-LocalGroupMember -Group administrators -Member $credential.UserName | Out-Null
16121615
winrm set winrm/config/service/Auth ''@{Basic="true"}'' | Out-Null

ContainerHandling/Remove-NavContainer.ps1

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ try {
6262
. (Join-Path $PSScriptRoot "updatehosts.ps1") -hostsFile "c:\windows\system32\drivers\etc\hosts" -theHostname $tenantHostname -theIpAddress ""
6363
}
6464

65-
if ($isAdministrator) {
65+
if ($isAdministrator -and ($bcContainerHelperConfig.useWinRmSession -ne 'never') -and (-not $bccontainerHelperConfig.useSslForWinRmSession)) {
66+
# If not using SSL for WinRm, we need to remove the container from the trusted hosts
6667
try {
6768
[xml]$conf = winrm get winrm/config/client -format:pretty
6869
$trustedHosts = $conf.Client.TrustedHosts.Split(',')

0 commit comments

Comments
 (0)