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:
($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:
# 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:
($ENV:Path).Split(';')
Once the directory is there, restart the icingapowershell service by running
Restart-IcingaForWindows;
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/Startwith 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
Advancedtab - Click on
Environment Variables - In the section
System variableslocate the entryPathand double click or simply left click to select it and then click theEditbutton
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 yourpowershell.exe, likeC:\Windows\System32\WindowsPowerShell\v1.0 - Close all windows by clicking on
OK
Windows 2016 or newer
- Click the
Newbutton on the top-right of the new window - Add the path containing your
powershell.exe, likeC:\Windows\System32\WindowsPowerShell\v1.0on 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:
($ENV:Path).Split(';')
Once the directory is there, restart the icingapowershell service by running
Restart-IcingaForWindows;
Now the error should be resolved the the service should be running.