Microsoft Powershell Sith Lord
, ,

Use Powershell for Windows Service Administration

Microsoft instructions for installing Powershell on Linux (Debian).

# Save the public repository GPG keys
curl | sudo gpg --yes --dearmor --output /usr/share/keyrings/microsoft.gpg

# Register the Microsoft Product feed
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] bullseye main" > /etc/apt/sources.list.d/microsoft.list'

# Install PowerShell
sudo apt update && sudo apt install -y powershell

# Start PowerShell

If the reader doesn’t have Windows Powershell™ installed on his or her system, I recommend getting it from and installing it– even if you don’t think you’d ever use most of the features it offers.

Since authoring a brief bit on Powershell, back in 2008, I’ve been using it more and more frequently. As I continue using Powershell, I find different– usually more efficient, and more powerful– ways of administering the system, or even completing simple tasks like file management.

Here, I offer a snippet– I admit– for private reference, but a passer-by might find it useful. The command might present some insight into the nature of Powershell, for anyone who is unfamiliar with it, or its many versatile functions.

I hope to revisit the topic, and elaborate upon it with some of the many notes I have regarding Powershell™, as I’ve compiled bits of commands in plain text files for my own refernce.

Examine Windows Services using .NET Powershell

I wrote the following command as part of my investigation into MySQL failing to run as a service (the typical installation setup) on a Windows XP system.

$wsl=(get-wmiobject win32_service -filter "name='WslService'")
$wsl | format-list *

$wsl | format-table

Using this simple command, I learned enough about the configuration of my system to identify what steps I needed to take in order to repair the problem. After a few minutes, MySQL was running as desired. (note: updated 08/2023 – changed the -filter “name=” from mysql to WslService, and the variable from $mysql to $wsl).


The following is a transcript of the Powershell commands I invoked, leading up to my resolution (aside from a few irrelevant bits removed).

$s = get-service schedule

set-service -inputobject $s -status stopped

These commands stop the Schedule service on the local computer.

The first command uses the Get-Service cmdlet to get the Schedule service. The command saves the service in the $s

The second command uses the Set-Service cmdlet to change the status of the Schedule service to “Stopped”. It uses t
he InputObject parameter to submit the service stored in the $s variable, and it uses the Status parameter to speci
fy the desired status.

Online version:

$mysql=(get-wmiobject win32_service -filter "name='mysql'")

ExitCode : 3
Name : MySQL
ProcessId : 0
StartMode : Auto
State : Stopped
Status : OK

$mysql | format-list *

Name : MySQL
Status : OK
ExitCode : 3
DesktopInteract : False
ErrorControl : Normal
PathName :
ServiceType : Own Process
StartMode : Auto
__GENUS : 2
__CLASS : Win32_Service
__SUPERCLASS : Win32_BaseService
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_Service.Name=”MySQL”
__DERIVATION : {Win32_BaseService, CIM_Service, CIM_LogicalElement, CIM_ManagedSystemElement}

__NAMESPACE : root\cimv2
__PATH : \\WIN-SYS-NAM-HERE\root\cimv2:Win32_Service.Name=”MySQL”
AcceptPause : False
AcceptStop : False
Caption : MySQL
CheckPoint : 0
CreationClassName : Win32_Service
Description :
DisplayName : MySQL
InstallDate :
ProcessId : 0
ServiceSpecificExitCode : 0
Started : False
StartName : LocalSystem
State : Stopped
SystemCreationClassName : Win32_ComputerSystem
TagId : 0
WaitHint : 0
Scope : System.Management.ManagementScope
Path : \\WIN-SYS-NAM-HERE\root\cimv2:Win32_Service.Name=”MySQL”
Options : System.Management.ObjectGetOptions
ClassPath : \\WIN-SYS-NAM-HERE\root\cimv2:Win32_Service
Properties : {AcceptPause, AcceptStop, Caption, CheckPoint…}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY…}
Qualifiers : {dynamic, Locale, provider, UUID}
Site :
Container :

 help wmiobject

Name Category Synopsis
—- ——– ——–
Get-WmiObject Cmdlet Gets instances of Windows Management Instrumentation (WMI) classes or in…
Remove-WmiObject Cmdlet Deletes an instance of an existing Windows Management Instrumentation (W…
using cmd.exe, executed the following command:

sc delete mysql
[SC] DeleteService SUCCESS

after launching MySQL Instance Config Wizard, and reconfiguring the service, the changes are reflected in the .NET Powershell Windows Management Instrumentation Object (aka. wmiobject) properties for the MySQL Server instance– most remarkably– at the PathName property:

Name :MySQL
Status :OK
ExitCode :0
DesktopInteract :False
ErrorControl :Normal
PathName :“C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt” –defaults-file=”C:\Program Files\MySQL\MySQL Server 5.0\my.ini” MySQL
ServiceType :Own Process
StartMode :Auto
__GENUS :2
__CLASS :Win32_Service
__SUPERCLASS :Win32_BaseService
__DYNASTY :CIM_ManagedSystemElement
__RELPATH :Win32_Service.Name=”MySQL”
__DERIVATION :{Win32_BaseService, CIM_Service, CIM_LogicalElement, CIM_ManagedSystemElement}
__NAMESPACE :root\cimv2
__PATH :\\WIN-SYS-NAM-HERE\root\cimv2:Win32_Service.Name=”MySQL”
AcceptPause :True
AcceptStop :True
Caption :MySQL
CheckPoint :0
CreationClassName :Win32_Service
Description : 
DisplayName :MySQL
InstallDate : 
ProcessId :5132
ServiceSpecificExitCode :0
Started :True
StartName :LocalSystem
State :Running
SystemCreationClassName :Win32_ComputerSystem
TagId :0
WaitHint :0
Scope :System.Management.ManagementScope
Path :\\WIN-SYS-NAM-HERE\root\cimv2:Win32_Service.Name=”MySQL”
Options :System.Management.ObjectGetOptions
ClassPath :\\WIN-SYS-NAM-HERE\root\cimv2:Win32_Service
Properties :{AcceptPause, AcceptStop, Caption, CheckPoint…}
SystemProperties :{__GENUS, __CLASS, __SUPERCLASS, __DYNASTY…}
Qualifiers :{dynamic, Locale, provider, UUID}
Site : 
Container :