aspnetcore/src/Microsoft.AspNetCore.Server.../Deployers/RemoteWindowsDeployer/RemotePSSessionHelper.ps1

55 lines
1.9 KiB
PowerShell

[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$serverName,
[Parameter(Mandatory=$true)]
[string]$accountName,
[Parameter(Mandatory=$true)]
[string]$accountPassword,
[Parameter(Mandatory=$true)]
[string]$executablePath,
[Parameter(Mandatory=$true)]
[string]$serverType,
[Parameter(Mandatory=$true)]
[string]$serverAction,
[Parameter(Mandatory=$true)]
[string]$applicationBaseUrl,
[Parameter(Mandatory=$false)]
[string]$environmentVariables
)
Write-Host "`nExecuting deployment helper script on machine '$serverName'"
Write-Host "`nStarting a powershell session to machine '$serverName'"
$securePassword = ConvertTo-SecureString $accountPassword -AsPlainText -Force
$credentials= New-Object System.Management.Automation.PSCredential ($accountName, $securePassword)
$psSession = New-PSSession -ComputerName $serverName -credential $credentials
$remoteResult="0"
if ($serverAction -eq "StartServer")
{
Write-Host "Starting the application on machine '$serverName'"
$startServerScriptPath = "$PSScriptRoot\StartServer.ps1"
$remoteResult=Invoke-Command -Session $psSession -FilePath $startServerScriptPath -ArgumentList $executablePath, $serverType, $serverName, $applicationBaseUrl, $environmentVariables
}
else
{
Write-Host "Stopping the application on machine '$serverName'"
$stopServerScriptPath = "$PSScriptRoot\StopServer.ps1"
$serverProcessName = [System.IO.Path]::GetFileNameWithoutExtension($executablePath)
$remoteResult=Invoke-Command -Session $psSession -FilePath $stopServerScriptPath -ArgumentList $serverProcessName, $serverType, $serverName
}
Remove-PSSession $psSession
# NOTE: Currenty there is no straight forward way to get the exit code from a remotely executing session, so
# we print out the exit code in the remote script and capture it's output to get the exit code.
$finalExitCode=$remoteResult[$remoteResult.Length-1]
exit $finalExitCode