diff --git a/scripts/services.ps1 b/scripts/services.ps1 new file mode 100644 index 0000000..8ccac6b --- /dev/null +++ b/scripts/services.ps1 @@ -0,0 +1,207 @@ +param ( + [string]$serviceName, + [string]$option, + [string]$appPath, + [string]$command, # just the command like run start or what ever you have in npm. + [string]$description, + [string]$remote, + [string]$server, + [string]$username, + [string]$admpass +) + +# Example string to run with the parameters in it. +# .\scripts\services.ps1 -serviceName "LST_app" -option "install" -appPath "E:\LST" -description "Logistics Support Tool in go" -command "E:\LST\app\lst_app.exe" + +$nssmPath = $AppPath + "\nssm.exe" +$npmPath = "C:\Program Files\nodejs\npm.cmd" # Path to npm.cmd + +# Convert the plain-text password to a SecureString +$securePass = ConvertTo-SecureString $admpass -AsPlainText -Force +$credentials = New-Object System.Management.Automation.PSCredential($username, $securePass) + +if($remote -eq "true"){ + +# if(-not $username -or -not $admpass){ +# Write-host "Missing adm account info please try again." +# exit 1 +# } + + $plantFunness = { + param ($service, $processType, $location) + # Call your PowerShell script inside plantFunness + # & "$($location)\dist\server\scripts\services.ps1" -serviceName $service -option $processType -appPath $location + + if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { + Write-Host "Error: This script must be run as Administrator." + exit 1 + } + + if(-not $service -or -not $processType){ + Write-host "The service name or option is missing please enter one of them and try again." + exit 1 + } + + if ($processType -eq "start"){ + write-host "Starting $($service)." + Start-Service $service + } + + if ($processType -eq "stop"){ + write-host "Stoping $($service)." + Stop-Service $service + } + + if ($processType -eq "restart"){ + write-host "Stoping $($service) to be restarted" + Stop-Service $service + Start-Sleep 3 # so we give it enough time to fully stop + write-host "Starting $($service)" + Start-Service $service + } + + if ($processType -eq "prodStop"){ + if(-not $location){ + Write-host "The path to the app is missing please add it in and try again." + exit 1 + } + & $nssmPath stop $service + write-host "Removing $($service)" + #& $nssmPath remove $serviceName confirm + sc.exe config $service start= disabled + + } + + if ($processType -eq "prodStart"){ + if(-not $location){ + Write-host "The path to the app is missing please add it in and try again." + exit 1 + } + & $nssmPath start $service + write-host "Removing $($service)" + #& $nssmPath remove $serviceName confirm + sc.exe config $service start= auto + + } + + } + + Invoke-Command -ComputerName $server -ScriptBlock $plantFunness -ArgumentList $serviceName, $option, $appPath -Credential $credentials +} else { + + if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { + Write-Host "Error: This script must be run as Administrator." + exit 1 + } + + if(-not $serviceName -or -not $option){ + Write-host "The service name or option is missing please enter one of them and try again." + exit 1 + } + + if ($option -eq "start"){ + write-host "Starting $($serviceName)." + Start-Service $serviceName + } + + if ($option -eq "stop"){ + write-host "Stoping $($serviceName)." + Stop-Service $serviceName + } + + if ($option -eq "restart"){ + write-host "Stoping $($serviceName) to be restarted" + Stop-Service $serviceName + Start-Sleep 3 # so we give it enough time to fully stop + write-host "Starting $($serviceName)" + Start-Service $serviceName + } + + if ($option -eq "delete"){ + if(-not $appPath){ + Write-host "The path to the app is missing please add it in and try again." + exit 1 + } + & $nssmPath stop $serviceName + write-host "Removing $($serviceName)" + & $nssmPath remove $serviceName confirm + + } + + if ($option -eq "prodStop"){ + if(-not $appPath){ + Write-host "The path to the app is missing please add it in and try again." + exit 1 + } + & $nssmPath stop $serviceName + write-host "Removing $($serviceName)" + #& $nssmPath remove $serviceName confirm + sc.exe config $serviceName start= disabled + + } + + if ($option -eq "prodStart"){ + if(-not $appPath){ + Write-host "The path to the app is missing please add it in and try again." + exit 1 + } + & $nssmPath start $serviceName + write-host "Removing $($serviceName)" + #& $nssmPath remove $serviceName confirm + sc.exe config $serviceName start= auto + + } + + if($option -eq "install"){ + if(-not $appPath -or -not $description -or -not $command){ + Write-host "Please check all parameters are passed to install the app.." + exit 1 + } + + + $service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue + + if(-not $service){ + write-host $serviceName "is not installed we will install it now" + + Write-Host "Installing $serviceName..." + if($command.Contains(".exe")){ + + & $nssmPath install $serviceName $command + + $fullAppPath = "$appPath\app" + & $nssmPath set $serviceName AppDirectory $fullAppPath + }else { + & $nssmPath install $serviceName $npmPath $command + & $nssmPath set $serviceName AppDirectory $appPath + } + + + & $nssmPath set $serviceName Description $description + & $nssmPath set $serviceName AppStdout "E:\LST\logs\service.log" + & $nssmPath set $serviceName AppStderr "E:\LST\logs\service-error.log" + & $nssmPath set $serviceName DependOnService "MSSQLSERVER" + # Set recovery options + sc.exe failure $serviceName reset= 0 actions= restart/5000/restart/5000/restart/5000 + & $nssmPath start $serviceName + }else{ + write-host $serviceName "is already installed will push the updated info" + Write-Host "Updating $serviceName..." + & $nssmPath stop $serviceName + + if($command.Contains(".exe")){ + $fullAppPath = "$appPath\app" + & $nssmPath set $serviceName AppDirectory $fullAppPath + }else { + & $nssmPath set $serviceName AppDirectory $appPath + } + + & $nssmPath set $serviceName Description $description + # & $nssmPath set $serviceName DependOnService "IISADMIN MSSQLSERVER" + # Set recovery options + sc.exe failure $serviceName reset= 0 actions= restart/5000/restart/5000/restart/5000 + Start-Sleep 4 + & $nssmPath start $serviceName + } + } +}