[〜#〜] wmi [〜#〜] を使用せずにPowerShellを使用してWindowsサービスのスタートアップタイプを取得するにはどうすればよいですか?
Get-Service コマンドの内部を調べましたが、「スタートアップの種類」を表示するものが提供されていません。
PowerShellバージョン4の場合:
以下のコマンドを実行できます。
Get-Service | select -property name,starttype
WMIはこれを行う方法です。
Get-WmiObject -Query "Select StartMode From Win32_Service Where Name='winmgmt'"
または
Get-WmiObject -Class Win32_Service -Property StartMode -Filter "Name='Winmgmt'"
PowerShellでは、コマンド Set-Service を使用できます。
Set-Service -Name Winmgmt -StartupType Manual
ただし、スタートアップの種類を表示するPowerShellコマンドは見つかりませんでした。コマンドGet-Serviceがそれを提供すると仮定しますが、そうではないようです。
私の知る限り、この情報を取得するための「ネイティブな」PowerShellの方法はありません。そしておそらく、それはPowerShellよりもむしろ.NETの制限です。
次に、この機能を次のバージョンに追加する提案を示します。
念のため、WMIの回避策もあります。私は自分のタスクにこのWMIソリューションを使用していますが、動作します。
以下も使用できます。
(Get-Service 'winmgmt').StartType
disabledなどの起動タイプのみを返します。
PowerShellバージョン5にアップグレード になったら、スタートアップの種類を取得できます。
実行しているPowerShellのバージョンを確認するには、$PSVersionTable
を使用します。
以下の例は、Windowsファイアウォールサービス用です。
ローカルシステムの場合
Get-Service | Select-Object -Property Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
1つのリモートシステム用
Get-Service -ComputerName HOSTNAME_OF_SYSTEM | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
複数のシステムの場合(systems.txtを作成する必要があります)
Get-Service -ComputerName (Get-content c:\systems.txt) | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
つかいます:
Get-Service BITS | Select StartType
または使用:
(Get-Service -Name BITS).StartType
Then
Set-Service BITS -StartupType xxx
[PowerShell 5.1]
PowerShell 5に更新すると、マシン上のすべてのサービスを照会し、NameとStartTypeを表示し、StartTypeで並べ替えて見やすくすることができます。
Get-Service |Select-Object -Property Name,StartType |Sort-Object -Property StartType
sc
ツールを使用して設定することもできます。
PowerShellから呼び出して、必要に応じて追加のチェックを追加することもできます。このツールとPowerShellの利点は、sc
ツールでも開始タイプを自動遅延に設定できることです。
# Get Service status
$Service = "Wecsvc"
sc.exe qc $Service
# Set Service status
$Service = "Wecsvc"
sc.exe config $Service start= delayed-auto