現在、Windows 用のサービスを作成しており、頻繁に調整してテスト コンピューターに更新しています。サービスを自動的に停止し、exe を更新してサービスを再起動するスクリプトを作成したいと考えています。ただし、停止と開始の部分が問題です。
接続先のコンピュータはドメイン上になく、ユーザー名とパスワードも共有していません。最善の方法はそうすることだと思いますsc.exe \\testsvr stop "myService"
が、ドメインも共有ユーザー名とパスワードも持っていないため、「アクセスが拒否されました」というメッセージが表示されます。
ユーザーを追加するのは非常に簡単ですが、ユーザーを変更できない場合に備えて、これを学習経験として利用したいと思いました。
答え1
私は見てみることにするPsサービスMicrosoft の Sysinternals から (Mark Russinovich によって書かれた優れたツール セットの一部)。
ウェブサイトから直接:
Usage: psservice [\\computer [-u username] [-p password]] <command> <options>
の場合、最も一般的なオプションとして、、、またはを<command>
使用できます。このスクリプトの優れた点は、2 台のマシンが同じドメインのメンバーであるか、またはその他の信頼関係があるかどうかに依存しないことです。start
stop
restart
答え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?