WindowsOSに対してリモートでPowerShellを使用しアクセスする方法・batを実行する方法をご紹介します。ほぼ自分メモなので見づらいこともあるかもしれません。
Powershellのリモート接続準備
WinRMを有効にする
接続先で実施
接続先で次のコマンドを実行します。
1 |
winrm quickconfig |
次のメッセージが出ればOK!
WinRM サービスは、既にこのコンピューターで実行されています。
このコンピューター上でのリモート管理には、WinRM が既に設定されています。
環境によって有効にするかのメッセージが出る場合もあります。
WinRM は、管理用にこのコンピュータへのリモート アクセスを許可するように設定されていません。
次の変更を行う必要があります。
このコンピュータ上のあらゆる IP への WS-Man 要求を受け付けるため、HTTP://* 上にWinRM リスナを作成します。
WinRM ファイアウォールの例外を有効にします。
変更しますか [y / n]? y
WinRM はリモート管理用に更新されました。
WinRMが実行されていなければ、接続先で次のコマンドを実行します。
1 |
Enable-PSRemoting |
*エラーが発生した場合、ネットワーク設定が「プライベート」でないか確認してください。
ネットワークの設定を変更するか、次のコマンドを実行します。
1 |
Enable-PSRemoting -SkipNetworkProfileCheck |
接続元で実施
接続元で次のコマンドを実行します。
1 |
winrm quickconfig |
次のメッセージが出ればOK!
WinRM サービスは、既にこのコンピューターで実行されています。
このコンピューター上でのリモート管理には、WinRM が既に設定されています。
環境によって有効にするかのメッセージが出る場合もあります。
WinRM は、管理用にこのコンピュータへのリモート アクセスを許可するように設定されていません。
次の変更を行う必要があります。
このコンピュータ上のあらゆる IP への WS-Man 要求を受け付けるため、HTTP://* 上にWinRM リスナを作成します。
WinRM ファイアウォールの例外を有効にします。
変更しますか [y / n]? y
WinRM はリモート管理用に更新されました。
接続元でも先ほどのコマンドを実行してWinRMを有効にします。
1 |
Enable-PSRemoting |
WinRMを有効にすると、ファイアウォールの5985番ポートがオープンします。
TrustedHostsを設定する
WinRMでは接続元から見て、接続先が「信頼できるホストである」ことが必要です。
Active Directory配下にどちらのホストも存在する場合は問題ないのですがワークグループ環境などでは次のコマンドを用いて個別に接続先のホストを信頼してあげる必要があります。
接続元のホストから次のコマンドを実行してください。
1 |
Set-Item WSMan:\localhost\Client\TrustedHosts -Value (ホスト名 or IPアドレス or *) |
実行すると次のようなメッセージが表示されますから,Yを入力して続行します。
WinRM セキュリティの構成。
このコマンドは WinRM クライアントの TrustedHosts の一覧を変更します。TrustedHostsの一覧内にあるコンピューターは認証されない可能性があります。クライアントはこれらのコンピューターに資格情報を送信する可能性があります。この一覧を変更しますか?
[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): Y
複数のホスト名やIPアドレスを設定する場合
1 |
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "host1, host2" |
すべてのホストを信頼する場合
1 |
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" |
★おすすめのコマンド(-Forceを付けて強制実行)
1 |
Set-Item WSMan:\localhost\Client\TrustedHosts * -Force |
現在設定されているTrustedHostsを確認
1 |
Get-Item WSMan:\localhost\Client\TrustedHosts |
設定されているTrustedHostsをすべて消去
1 |
Clear-Item WSMan:\localhost\Client\Trustedhosts |
これで接続前の準備は完了です(2回目以降は行う必要はありません)。
セッションを開始する
次のコマンドにより,リモートマシンへの接続を開始します。コマンド実行後にパスワードを入力するダイアログが開きます。
1 |
Enter-PSSession -ComputerName (ホスト名) -Credential (ユーザ名\ドメイン) |
以降ローカルマシンと同様にリモートコンピュータ上でPowerShellによる操作を行うことができます.
セッションを終了する
セッションを終了する場合は次のコマンドを実行します。
1 |
Exit-PSSession |
リモートでbatを実行する
パスワードを変数に格納し、コマンドを作り、Invokeコマンドで実行するだけ。
1 2 3 |
$pass = ConvertTo-SecureString -AsPlainText -Force "password" $psc = New-Object System.Management.Automation.PSCredential("domain\username",$pass) Invoke-Command 接続先ホストorIP { D:\test.bat } -Credential $psc |
終わりに
本番環境のサーバだとリモートデスクトップで気軽に入れないことがあるんですよね。
現場次第ですが、Powershellなら許可されることもあるので、情報収集するようなbatを仕込んでおいてそれをリモート実行するなら許可される場合があります。
実行する際はコマンドを間違えないようにおなしゃす!