Windows でリモートスクリプトを実行する (その2)

Windows でリモートスクリプトを実行する (その1)」 では、Kompira Enterprise からスクリプトジョブを利用して Windows にバッチファイルを実行させました。
今回の記事では Kompira Enterprise から Windows に PowerShell スクリプトを実行させてみましょう。

※ 本記事では WinRM での接続ができており、Windows への接続に必要なノード情報、アカウント情報も用意されている前提です。できていない場合には 「Windows でリモートスクリプトを実行する (その1)」を参照して準備してください。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.5.5.post11
OS CentOS  7.8.2003
Windows 10 21H1
Windows Server 2019 (バージョン1809)
WinRM 3.0
PowerShell 5.1

または

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post4
OS CentOS  7.8.2003
Windows 10 21H1
Windows Server 2019 (バージョン1809)
WinRM 3.0
PowerShell 5.1

PowerShell スクリプトとは

歴代の Windows には command.com/cmd.exe といったコマンドラインツールが付属し、いわゆる MS-DOS 時代からのバッチ実行ができるようになっていました。これを補強する意味で Windows 98 から Windows Script Host (WSH) が提供されましたが、セキュリティ面での問題が指摘されるに至って、広く普及しませんでした。
そこで自社 OS のシステム管理や自動化を行うための新世代シェル / プログラミング言語として PowerShell を発表しました。
PowerShell は多くのコンポーネント (コマンドレット) を組み合わせたタスクで構成されます。

実行ポリシーの変更

システム保護のために OS の初期設定の段階では、PowerShell スクリプトの実行が制限されている場合があります。特に Windows Server 2012 以前の OS では、スクリプトファイルの実行ができない「Restricted」に、デフォルトでポリシーが設定されています。このポリシーを変更するには、 Set-ExecutionPolicy というコマンドレットを使用します。

これに「RemoteSigned」を指定した場合、ローカルで作成されたスクリプトは無条件で実行できますが、ネットワークから入手したスクリプトは署名が無ければ実行できません。Windows Server 2019 はこの設定がデフォルトです。

以下、主な実行ポリシーの種類を示します。

Restricted すべてのスクリプトの実行禁止。対話型モードでのみ実行可能
AllSigned 信頼できる発行元が署名したスクリプトのみ実行可能
RemoteSigned ダウンロードしたスクリプトは信頼できる発行元が署名した場合にのみ実行可能
Bypass すべてのスクリプトが実行可能

スクリプトを実行できるように、ポリシーを変更します。管理者権限で PowerShell を起動し、以下のコマンドを実行してください。

> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック(https://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] 全て実行(A)  [N] いいえ(N)  [L] 全て無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

スクリプトの実行

ここでは「スクリプトジョブ」型の「PowerShellスクリプトの実行」という名前のオブジェクトを作成します。

PowerShellスクリプトの実行

$user= Get-Content env:username
$srv = hostname

Write-Host "Kompira Enterprise から実行しています。"
Write-Host "引数は $args です。"
Write-Host "ユーザーは $user です。"
Write-Host "ホスト名は $srv です。"

Windows でバッチファイルを実行させる場合拡張子を設定する必要があるので、以下のように「拡張子」の欄に「ps1」と入力してください。

以下のように「Windows でリモートスクリプトを実行する (その1)」と同様に実行ノード、実行アカウント、実行時引数を指定して実行してみます。

実行結果は以下のようになります。バッチファイルと同様に実行できることがわかります。

※ Kompira Enterprise 1.5 系では [EXIT STATUS] 以降のみが表示されます。

Microsoft 社も管理系のツールは PowerShell で実装することを表明しており、バッチファイルよりも適用範囲が多いため、PowerShell スクリプトの利用は Windows の管理をする場合には大変有用です。

TOP