mirror of
https://github.com/Icinga/icinga-powershell-framework.git
synced 2025-12-21 07:10:15 -05:00
125 lines
4.4 KiB
Markdown
125 lines
4.4 KiB
Markdown
# 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
|
|
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
|
|
Restart-IcingaWindowsService;
|
|
```
|
|
|
|
Now the error should be resolved the the service should be running.
|