PowerShell スクリプトを使用して Windows サービスを作成し、実行する方法

PowerShell スクリプトを使用して Windows サービスを作成し、実行する方法

Windows 2016 で新しいサービス (AppOneTest) を作成しようとしています。このサービスは services.msc で利用可能で、サービス (AppOneTest) が起動するたびにプロセス エクスプローラーが起動されるはずです。

$ServiceName = "ApplicationOneTest"
$ServiceDisplayName = "AppOneTest"
$ServiceDescription = "This launches process explorer"
$ExecutablePath = "C:\processexp\procexp64.exe"

$ScriptPath = "C:\Backup\LaunchScript.ps1"
$LaunchScript = @"
    # Script to launch processexp
    & '$ExecutablePath'
"@
$LaunchScript | Out-File -FilePath $ScriptPath -Encoding utf8

New-Service -Name $ServiceName -DisplayName $ServiceDisplayName -Description $ServiceDescription -BinaryPathName "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File $ScriptPath" -StartupType Automatic

sc.exe config $ServiceName obj= "domain\username" password= "******" type= interact

Start-Service -Name $ServiceName

このスクリプトはサービスを作成し、そのサービスを開始しようとします。ただし、作成されたサービスを開始しようとすると、停止し、開始されません。

ご協力いただければ幸いです。

答え1

Windows Vista では対話型サービスはほとんど効果がないため、使用しないでください。

サービス プログラムは特定のインターフェイスに準拠する必要があり、サービス コントロール マネージャーと対話して、ステータスなどを通知する必要があります。Process Explorer やその他の一般的なアプリケーションでは、このようなことは行われません。

次のようなサービスラッパーを使うことができますNSSM任意のプログラムをサービスとして実行します。これは、Java サーバー アプリケーションでよく使用されるソリューションです。


UI テストを実行するには、代わりに自動ログインが構成され、ディスプレイのスリープ/ロックが無効になっている VM を使用し、常に開いている通常のセッションでテストを実行する必要があります。

答え2

対話型システムサービスを実行しようとしています。これは推奨されません。私の回答に加えて、解決すべき複雑な問題がいくつかあるかもしれません。すべてのプログラムがシステムサービスプロトコルを使用して実行されるわけではないことに注意してください。また、Explorerが適しているかどうかは疑問です。私がリストしたユーティリティが見つかるかもしれません。 この答え このような不適切なプログラムからアドホックサービスを作成するのに役立ちます。 srvany-ngそして NSSM

少なくとも、ログインしているユーザーと同じユーザーアカウントでサービスを実行する必要があります。PowerShellでは、これはPSC 資格情報 ユーザーの資格情報を含むオブジェクト。

コード例:

$username = "username"
$password = "password"
$securepassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($username, $securepassword)

New-Service [...] -Credential $cred

参考文献:

関連情報