web-dev-qa-db-ja.com

別のコンピューター上のサービスの制御

私は現在、Windows用のサービスを作成しており、頻繁にそれを調整してテストコンピューターに更新しています。サービスを自動的に停止し、exeを更新し、サービスを再起動するスクリプトを作成したいと思います。しかし、それは私が問題を抱えている部分を停止して開始します。

接続しているコンピューターはドメイン上になく、ユーザー名とパスワードを共有していません。 sc.exe \\testsvr stop "myService"を実行するのが最善の策だと思いますが、ドメインまたは共有のユーザー名とパスワードがないため、「アクセスが拒否されました」というメッセージが表示されます。

ユーザーを追加するだけで簡単にできますが、ユーザーを変更できない場合の学習体験としてこれが必要でした。

2

MicrosoftのSysinternals(Mark Russinovichによって作成された優れたツールセットの一部)の PsService を見てみましょう。

ウェブサイトから直接:

Usage: psservice [\\computer [-u username] [-p password]] <command> <options>

にとって <command>、最も一般的なオプションとしてstartstop、またはrestartを使用できます。このスクリプトの優れている点は、2つのマシンが同じドメインのメンバーであるか、他の信頼を持っているかに依存しないことです。

3
Evan

ここで完全を期すために、ストックWindowsツールのみでこれを実行する場合は、最初にリモートマシンへのIPC接続を確立して(そのマシンでセキュリティトークンを確立するため))、次に「SC」コマンド:

Net Use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
Net Use \\remote\IPC$ /delete

これにより、両方のマシンのワークグループ/ドメインメンバーシップの組み合わせに関係なく、リモートマシン上のサービスを制御できます。

6
Evan Anderson

ドメイン以外の構成で個人的に試したことはありませんが、「RunAs」を指定してSC.exeを実行し、ターゲットコンピューターの資格情報を使用しますか?

Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""

1
techie007

DOMAIN環境では、スクリプトを実行するログインユーザーに適切なユーザー権限が付与されていれば、NetUseコマンドを使用できます。 PowerShellはおそらく最も強力なオプションですが、古いMicrosoftオペレーティングシステムを実行している場合は、いくつかのPowerShellコマンドの実行で問題が発生する可能性があります。すべてがWindows2008以降の場合、私は間違いなくPowerShellを使用します。

それが選択肢ではない場合、私はPSToolsパッケージで大成功を収めました。 Evanが前述したように、このオプションを使用する場合は、同じパッケージのpskillユーティリティに精通している必要があります。一部のサービスは、リモートでいじくり回しているときに優雅に死ぬことはありません。この小さなユーティリティは、それらを殺すのに最適です。

好奇心から、これをどのスクリプト言語でコーディングしていますか? VBScript?バッチ? Perl?

Powershell2.0を見たいと思うかもしれません。この機能が一種のRDPとして組み込まれている可能性があるため、ドメインは必要ありませんが、接続を有効にしていくつかのポートを開きます。あなたがグーグルできる簡単な説明といくつかのキーワードについては ここ を見てください。

0
ssvarc