リモート電源オンコマンド。 ネットワーク経由でリモートコンピュータ上でコンソールコマンドを実行する

23.06.2018

この記事では、実行方法について説明します コンソールコマンドネットワーク上のリモート コンピュータ上で、非常に役立つ例がいくつか示されています。 システム管理者チーム。

2つの製品を使用しています リモート実行コンソール コマンド: PsExec と WinRM、それぞれに独自の利点があります。

PsExec

タイトルで提起された問題に対する優れた解決策の 1 つは、偉大な Mark Russinovich の PsExec プログラムを使用することです。

このプログラムはクライアント/サーバーの原則に基づいて動作します。クライアントはローカル マシン上で実行され、クライアントはリモート コンピューター上のサーバーにコマンドを送信します。 このプログラムの特徴は、 サーバー部分コマンドが実行される直前に自動的にインストールされ、その後削除されます。 したがって、リモート マシン上でコマンドを実行するには、そのマシンに対する管理者権限があれば十分です。

PsExec がリモート コンピューターと同じドメインの一部である管理者として実行されている場合は、資格情報を入力する必要さえありません。 それ以外の場合は、コマンド ラインで指定するか、PsExec によって入力を求められます。 PsExec は Windows 2000 から 64 ビットまでの OS で動作します Windowsサーバー 2008 R2。

PsExec では次の機能が非常に便利です。

  • コンピュータのグループ上でコマンドを実行する。 例: 次のコマンドは、最新のものを強制します。 グループポリシー:
    psexec @group.txt gpupdate /force
  • システムに代わってコマンドを実行する アカウント 。 例: 次のコマンドにより、 リモートシステム更新の強制チェック:
    psexec \\computer -s wuauclt /detectnow
  • 実行中のプログラムを実行する前にリモート コンピュータにコピーする。 例: 次のコマンドはメンバーシップを更新します このコンピュータの再起動せずに Active Directory セキュリティ グループ (アクセス トークン) で:
    psexec \\computer -c -s klist.exe のパージ

Windows に組み込まれているスクリプトとコンソール コマンドの機能を使用する場合、このプログラムの有用性を過大評価することは困難です。

Windows リモート管理

当初は、次のようなサーバー技術でした。 リモコンハードウェア。ハードウェア管理機能の一部として Windows Server 2003 R2 に導入されましたが、Microsoft は最近リリースしました。 Windowsパッケージ管理フレームワーク。PowerShell 2.0 および WinRM 2.0 が含まれ、更新としてクライアント OS にインストールされます。 詳細については、記事 KB968929 を参照してください。

WinRM の利点は、オプションの OS アップデートとして WSUS を介してドメイン環境に展開するのが簡単なことと、PowerShell と併用したときに提供される機能です。

WinRM を使用するには、2 つのコマンドを使用します。

winrm.cmd設定を構成し、WinRM クライアントとサーバーを診断するのに役立ちます。

WinRM サーバーがコマンドの受け入れを開始するには、Windows リモート管理サービスを開始し、その初期構成を完了する必要があります。 コマンドを使用する

ローカルマシン上のwinrm Quickconfig、または耳を使ったトリック
psexec -s \\servername PsExec をシステム アカウントとして使用して、ネットワーク経由で winrm Quickconfig を実行します。

WinRM サービスを自動的に開始してリモート接続を許可するよう求められますので、同意します;)

同じドメインの一部ではない WinRM サーバー (コマンドを受け入れるバックエンドを意味します) に正常に接続するには クライアントコンピュータの場合は、次のコマンドを使用して、このターゲット サーバーをクライアントの「信頼できるリスト」に追加する必要があります。

winrm set winrm/config/client @(TrustedHosts="servername") 。ここで、servername の代わりに IP アドレスまたは * (アスタリスク) を指定できます。

のために Windowsユーザー Vista および Windows 7 では、組み込みの管理者として実行されていない (これが通常のケースです) 場合は、次のコマンドを実行する必要があります。

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

デフォルトでは、クライアントからの同時 WinRM 接続は 5 に制限されています。この数を増やすには、次のコマンドを実行します。

winrm s winrm/config/winrs @(MaxShellsPerUser="X")

winrs.exe— サーバー部分にリクエストを送信するためのクライアント。 例: 次のコマンドはリモート システムを強制的に再起動します...

winrs -r:サーバー名 shutdown /r /t 0

ドメイン環境では、コマンドを送信するときに実行ユーザーの資格情報が使用されます。 別のユーザーに代わってコマンドを送信するには、-u:user -p:pass スイッチを使用します。 例: 次のコマンドは、リモート システム上のローカル DNS 名キャッシュをクリアします。

winrs -r:サーバー名 -u:ユーザー -p:pass ipconfig /flushdns

PsExec - コマンドをリモートで実行するためのユーティリティ

リモート コンピューター上でコマンドを実行することは、非常に一般的なタスクです。 これは、システム設定の変更、プログラムのインストールまたは削除などに必要になる場合があります。 このような問題を解決するためのさまざまなツールが数多くあります。 ソフトウェアシステムタイプ システム センター 構成マネージャーそして最後は控えめなユーティリティで終わる コマンドライン。 この記事では、これらのユーティリティの 1 つについて説明します。

PsExec ユーティリティは、Sysinternals の PsTools パッケージの一部です。 コマンドを実行できるようになります リモートコンピュータシステムにインストールする必要はありません。 このユーティリティを使用するには、実行可能ファイルのあるフォルダー (C:\Windows\system32 など) にユーティリティをコピーし、任意のコマンド ライン シェル (Cmd または PowerShell) から実行します。
プログラムの動作原理は次のとおりです。実行可能ファイル PsExec.exe のリソースには、別の実行可能ファイル PSEXESVC があります。 Windowsサービス。 コマンドを実行する前に、PsExec はこのリソースをリモート コンピューター Admin$ (C:\Windows) の隠し管理フォルダー内のファイル C:\Windows\system32\psexesvc.exe に解凍します。

注記。キーを使用している場合 -c実行可能ファイルをこのシステムにコピーする必要があることをプログラムに指示すると、実行可能ファイルもこのフォルダーにコピーされます。

コピーが完了すると、PsExec が API を使用してサービスをインストールし、開始します。 Windowsの機能サービスを管理するため。 次に、PSEXESVC を起動すると、PSEXESVC と PsExec の間に接続が確立され、データ転送 (コマンドの入力と結果の受信) が行われます。 完了すると、PsExec はサービスを停止し、ターゲット コンピューターから削除します。

PsExec の構文は次のとおりです。

psexec \\computer [-u ユーザー [-p パスワード]] プログラム [引数]

ユーザー名とパスワードを指定する必要はありません。その場合、リモート プロセスは PsExec プログラムと同じアカウントで起動されます。 ただし、リモート プロセスは偽装されているため、アクセスできません。 ネットワークリソースリモートシステム。 ユーザー名を指定すると、リモート プロセスは指定されたアカウントで実行され、このアカウントと同じリモート システムのネットワーク リソースにアクセスできるようになります。 ただし、パスワードはクリア テキストでリモート システムに送信されることに注意してください。

例として、リモート コンピューター SRV1 の DNS キャッシュをクリアしてみましょう。

psexec\\SRV1 ipconfig /flushdns

コマンドは、資格情報を使用して SRV1 コンピューター上で実行されます。 ipconfig が完了すると、すべてのテキスト出力がコンピュータに送信され、さらにコマンドの実行コード (エラー コード) が返されます。 コマンドが正常に実行された場合、値は 0 になります。

複数のコマンドを実行する必要がある場合は、リモート コンピュータとの対話型セッションを確立することをお勧めします。 これを行うには、次のコマンドを入力します psexec\\SRV1 cmd。 これで、ローカル コンピュータで入力されたコマンドがリモート コンピュータ SRV1 で実行されるようになります。


PsExec を使用すると、複数のコンピューターでコマンドを同時に実行できます。 これを行うには、コンピューター名をカンマで区切って入力します。 psexec\\SRV1、SRV2またはに保存します テキストファイル次に、そのアドレスを指定します。 psexec @c:\comp.txt。 コンピューター名の代わりにアスタリスクを入力すると、次のようになります。 psexec\\*, その後、コマンドはドメイン内のすべてのコンピューターで実行されます。


PsExec ユーティリティを使用するもう 1 つの興味深い方法があります。 コンピュータ名を指定しない場合、デフォルトではコマンドは次の場所で実行されます。 ローカルシステム。 キーの使用 -sシステム アカウントでプログラムを実行できます。 たとえば、コマンド ライン セッションを開始してみましょう。 psexec -s cmdそしてコマンドを使用して おいおい現在どのユーザーの下で作業しているかを確認してみましょう。 この機能は、プログラムのデバッグや、非表示のレジストリ キー SAM および SECURITY へのアクセスに役立ちます。


さて、プログラム キーについて少し説明します。 すべてを説明することはできませんが、最も興味深いものについて説明します。

指定されたプログラムは、実行のためにリモート システムにコピーされます。 例えば:

psexec \\SRV1 -c test.exe

このパラメーターが指定されていない場合、アプリケーションはリモート コンピューターのシステム フォルダーに配置されている必要があります。 このようなプログラムがリモート コンピューター上に既に存在し、システム ディレクトリにない場合は、そのプログラムへの絶対パスを指定する必要があります (プログラム名にスペースが含まれる場合は、引用符で囲む必要があります)。

psexec \\SRV1 "c:\program files\test.exe"

鍵と一緒なら -c鍵を使う -fその場合、プログラムがすでにリモート システム上にある場合でも、上書きされます。 そして鍵付き -vコピーされたプログラムのバージョンがシステムにインストールされているバージョンよりも新しい場合にのみ上書きされます。

プログラムは対話モードで動作します。 デフォルトでは、PsExec は次の場所でコマンドを実行します。 隠しモードつまり、コマンドが実行されるシステム上ではウィンドウもダイアログも表示されません。 ただし、キーを使用してこれを変更することは可能です -私。 その後、ウィンドウを表示するセッション番号を指定できます。指定できない場合は、インターフェイスはコンソール セッションで表示されます。

アプリケーションが完了するまで待つ必要がないことを示します。 この場合、コンソール ユーティリティから出力を受け取ることはできませんが、完了を待たずに出力を受け取ることができます。 前のコマンド以下を実行します。 このオプションは、非対話型アプリケーションを実行する場合にのみ使用してください。

モードでプログラムを実行するために使用されます。 で必要になる場合があります オペレーティングシステム Windows Vistaシステム設定を変更するプログラム (regedit など) を実行するには、それ以降のバージョンを使用します。

そして、このキーの助けを借りて、逆に、権限を減らすことができます。 プロセスが開始されると、ユーザーが Administrators グループに属しているかどうかに関係なく、ユーザーには制限付きの権限が付与されます (Administrators グループの権限は取り消され、ユーザーには Users グループに割り当てられた権限のみが付与されます)。

満杯 背景情報コマンドを入力するだけで、すべてのプログラム キーに関する情報を取得できます。 psexecコマンドラインでパラメータを指定せずに実行します。

Telnet などのユーティリティや、Symantec の PC Anywhere などのリモート管理プログラムを使用すると、リモート システム上でプログラムを実行できますが、クライアントもインストールする必要があるため、インストールは簡単ではありません。 ソフトウェアアクセスする必要があるリモート システム上で。 PsExec は Telnet の軽量バージョンです。 これにより、対話型インターフェイスのすべての機能を使用して、リモート システム上でプロセスを実行できます。 コンソールアプリケーションクライアント ソフトウェアを手動でインストールする必要はありません。 PsExec の主な利点は、リモート システム上のコマンド ライン インターフェイスを対話的に呼び出し、IpConfig などのツールをリモートで実行できることです。 これが唯一の表示方法です ローカルコンピュータリモート システムに関するデータ。

注記。 一部のウイルス スキャナーは、これらのプログラムの 1 つ以上が「リモート管理」ウイルスに感染していると報告します。 PsTools スイートに含まれるプログラムにはウイルスは含まれていませんが、ウイルスによって使用されているため、これらの警告が表示されます。

インストール

PsExec プログラムをフォルダーにコピーするだけです。 実行可能ファイル。 psexec コマンドを入力すると、コマンド構文に関するヘルプが表示されます。

PsExec は手術室で動作します Windows システム Vista、NT 4.0、Win2000、Windows XP、および Server 2003 (64 ビット OS バージョンを含む)

使用法

Windows IT Pro マガジン 2004 年 7 月号の Mark Russinovich による記事では、このプログラムを使用するための追加の方法が説明されています。 PsExec.

使用法: psexec [\\コンピュータ[,コンピュータ2[,...] | @file][-u ユーザー [-p パスワード]][-ns s][-l][-s|-e][-x][-i [セッション]][-c [-f|-v]] [-w ディレクトリ][-d][-<приоритет>][-a n,n,... ] プログラム [引数]

コンピューター

指定されたコンピューター上でアプリケーションを実行するように PsExec に指示します。 コンピューター名が指定されていない場合、PsExec プログラムはローカル システムでアプリケーションを起動しますが、コンピューター名の代わりにアスタリスク文字 (\\*) が指定されている場合、PsExec プログラムはすべてのコンピューターでアプリケーションを起動します。現在のドメインの。

@ファイル

指定されたテキスト ファイルにリストされているすべてのコンピューターでアプリケーションを実行するように PsExec に指示します。

アプリケーションを実行できるプロセッサはカンマで区切られ、プロセッサには 1 から始まる番号が付けられます。たとえば、アプリケーションをプロセッサ 2 と 4 で実行するには、「-a 2,4」と入力します。

指定されたプログラムは、実行のためにリモート システムにコピーされます。 このパラメータが指定されていない場合、アプリケーションはリモート システムのシステム フォルダに配置されている必要があります。

アプリケーションが完了するまで待つ必要がないことを示します。 このオプションは、非対話型アプリケーションを実行する場合にのみ使用してください。

指定されたアカウント プロファイルがロードされていません。

指定されたプログラムは、そのようなファイルがリモート システムにすでに存在している場合でも、リモート システムにコピーされます。

起動されたプログラムは、リモート システム上の指定されたセッションのデスクトップにアクセスします。 セッションが指定されていない場合、プロセスはコンソール セッションで実行されます。

プロセスが開始されると、ユーザーには制限付きの権限が付与されます (管理者グループの権限は上書きされ、ユーザーにはユーザー グループに割り当てられた権限のみが付与されます)。 Windows Vista では、プロセスは低いレベルの信頼性から始まります。

リモート コンピューターへの接続遅延を (秒単位で) 設定できます。

ユーザー名にオプションのパスワードを指定できます。 このパラメータを省略すると、パスワードの入力を求められ、パスワードは画面に表示されません。

リモート プロセスはシステム アカウントから起動されます。

リモート システムにログインするためのオプションのユーザー名を指定できます。

指定されたファイルは、バージョン番号が高いか新しい場合にのみ、既存のファイルの代わりにリモート システムにコピーされます。

プロセスの作業ディレクトリ (リモート システム内のパス) を指定できます。

Winlogon デスクトップにユーザー インターフェイスを表示します (ローカル システムのみ)。

-優先度(優先度)

プロセスにさまざまな優先順位を設定できます: -low (低)、-belownormal (平均以下)、-abovenormal (平均以上)、-high (高)、または -realtime (リアルタイム)。

プログラム

起動するプログラムの名前。

引数

渡される引数 (ファイル パスはターゲット システム上のローカル パスとして指定する必要があることに注意してください)。

スペースを含むアプリケーション名を指定するには、psexec \\marklap "c:\longname\app.exe" のように引用符を使用します。 「Enter」キーを押すと、入力されたデータがリモート システムに転送されます。リモート プロセスを終了するには、Ctrl-C キーの組み合わせを押す必要があります。

ユーザー名が指定されていない場合、リモート プロセスは PsExec と同じアカウントから実行されます。 ただし、リモート プロセスは偽装されるため、リモート システムのネットワーク リソースにアクセスできません。 ユーザー名が指定されている場合、リモート プロセスは指定されたアカウントで実行され、リモート システム上のそのアカウントと同じネットワーク リソースにアクセスできるようになります。 パスワードはクリア テキストでリモート システムに送信されることに注意してください。

PsExec は管理者権限を必要としないため、ローカル システムにアクセスする場合、Runas の代わりにこのバージョンの PsExec を使用できます。

このコマンドは、\\marklap システム上の対話型コマンド ライン インターフェイスを呼び出します。

psexec\\マークラップコマンド

このコマンドは、/all パラメーターを使用してリモート システム上で IpConfig プログラムを実行し、結果のデータをローカル システム画面に表示します。

psexec \\marklap ipconfig /all

このコマンドは、test.exe をリモート システムにコピーし、対話的に実行します。

psexec \\marklap -c test.exe

このようなプログラムがリモート システムにすでにインストールされており、システム ディレクトリにない場合は、このプログラムへのフル パスを指定します。

psexec \\marklap c:\bin\test.exe

このコマンドは、システム アカウントから Regedit を対話的に実行して、SAM および SECURITY レジストリ キーのデータを表示します。

psexec -i -d -s c:\windows\regedit.exe

このコマンドはプログラムを呼び出すために使用されます インターネットエクスプローラー制限された権限を持つユーザーに代わって:

psexec -l -d "c:\program files\internet Explorer\iexplore.exe"