icinga-powershell-framework/doc/knowledgebase/IWKB000005.md

126 lines
4.4 KiB
Markdown
Raw Normal View History

# Icinga Knowledge Base - IWKB000005
## Short Message
powershell.exe : Failed to start service 'Icinga PowerShell Service (icingapowershell)'.
## Example Exception
powershell.exe : Failed to start service 'Icinga PowerShell Service (icingapowershell)'.
At C:\Program
Files\WindowsPowerShell\Modules\icinga-powershell-framework\lib\core\framework\Restart-IcingaService.psm1:29 char:9
\+ powershell.exe -Command {
\+ ~~~~~~~~~~~~~~~~~~~~~~~~~
\+ CategoryInfo : OpenError: (System.ServiceProcess ServiceController:ServiceController) [Restart-Service], ServiceCommandException
\+ FullyQualifiedErrorId :
StartServiceFailed,Microsoft.PowerShell.Commands.RestartServiceCommand
### Event Log Entry
error-event (Source: Icinga
PowerShell Service, Event ID 0):
Service cannot be started. System.ComponentModel.Win32Exception
(0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo
startInfo)
at icinga_service.src.classes.Agent.StartAgent()
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object
state)
## Reason
The `icingapowershell` service of the `Icinga for Windows` solution is unable to locate `powershell.exe`. The service is using `powershell.exe` natively without any directory configuration and looking up the `PATH` variable which normally includes a path like `C:\Windows\System32\WindowsPowerShell\v1.0` which contains the required `powershell.exe`
## Solution
### With PowerShell
To resolve this issue, ensure that your `PATH` environment variable is containing a directory which inherits a `powershell.exe`. By default, this should be `C:\Windows\System32\WindowsPowerShell\v1.0`.
You can check this by opening a PowerShell by running the following command:
```powershell
($ENV:Path).Split(';')
```
If there is no directory listed containing a `powershell.exe`, you will have to add this path manually. You can either use the UI for this or modify and run the following PowerShell code within an Administrator shell to add a new path permanently to the `PATH` variable by modifying the registry:
```powershell
# The variable containing the folder we want to include
$PathDir = 'please enter the path here';
# Read PATH from registry
$CurrentPath = (Get-ItemProperty `
-Path 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' `
-Name 'PATH'
).path;
# Add our defined path to the CurrentPath variable
$CurrentPath = [string]::Format('{0};{1}', $CurrentPath, $PathDir);
# Write the modified Path into the registry
Set-ItemProperty `
-Path 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' `
-Name 'PATH' `
-Value $CurrentPath;
```
Now open a new PowerShell session again and check of the new directory was added:
```powershell
($ENV:Path).Split(';')
```
Once the directory is there, restart the `icingapowershell` service by running
```powershell
2021-08-06 12:12:27 -04:00
Restart-IcingaWindowsService;
```
Now the error should be resolved the the service should be running.
### With UI
You can use the UI for modifying the `PATH` variable. Please follow the steps below
* Click on `Windows/Start` with the right mouse button
* Click on `System`
* In the new windows click in `Advanced System Settings` (on Windows 2012 R2 or older on the left side, on Windows 2016 or newer on the right side)
* Click on the `Advanced` tab
* Click on `Environment Variables`
* In the section `System variables` locate the entry `Path` and double click or simply left click to select it and then click the `Edit` button
Windows 2012 R2 or older:
* Jump to the end of the textbox `Value of Variable` (containing different directories) and add a `;` if not already present. Afterwards add the path containing your `powershell.exe`, like `C:\Windows\System32\WindowsPowerShell\v1.0`
* Close all windows by clicking on `OK`
Windows 2016 or newer
* Click the `New` button on the top-right of the new window
* Add the path containing your `powershell.exe`, like `C:\Windows\System32\WindowsPowerShell\v1.0` on the newly created entry
* Close all windows by clicking on `OK`
Now open a new PowerShell session again and check of the new directory was added:
```powershell
($ENV:Path).Split(';')
```
Once the directory is there, restart the `icingapowershell` service by running
```powershell
2021-08-06 12:12:27 -04:00
Restart-IcingaWindowsService;
```
Now the error should be resolved the the service should be running.