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

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

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

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

ユーザーを追加するのは非常に簡単ですが、ユーザーを変更できない場合に備えて、これを学習経験として利用したいと思いました。

答え1

私は見てみることにするPsサービスMicrosoft の Sysinternals から (Mark Russinovich によって書かれた優れたツール セットの一部)。

ウェブサイトから直接:

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

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

答え2

完全を期すために、標準の Windows ツールのみを使用してこれを行う場合は、最初にリモート マシンへの IPC 接続を確立し (そのマシンでセキュリティ トークンを確立するため)、次に "SC" コマンドを使用します。

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

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

答え3

個人的には非ドメイン構成で試したことはありませんが、おそらく SC.exe を「RunAs」で実行し、ターゲット コンピューターの資格情報を使用するのではないでしょうか。

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

答え4

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

それが選択肢にない場合は、PSTools パッケージで大きな成功を収めました。このオプションを選択する場合は、Evan が先に述べたように、同じパッケージの pskill ユーティリティに慣れておく必要があります。一部のサービスは、リモートで操作しているときに正常に終了しないことがあります。この小さなユーティリティは、それらのサービスを終了するのに最適です。

興味深いのですが、これをどのスクリプト言語でコーディングしていますか? VBScript? BATch? Perl?

関連情報