今回は「【PowerShell 6.0】スクリプトの作り方【設定編】【Part.2】」に続き、簡単なスクリプトを作成してリモートコンピュータ上で実行してみます。
以前の PowerShell 関連の記事は以下を参照してください。
【PowerShell 6】Windows 7、Windows 2016への PowerShell 6 インストール手順
【PowerShell 6.0】スクリプトの作り方【設定編】【Part.1】
【PowerShell 6.0】スクリプトの作り方【作成編】【Part.2】
【PowerShell 6.0】スクリプトの作り方【実行編】【Part.3】
実行ポリシーを確認する
実行ポリシーには以下の 5つがあります。
- Restricted
- AllSigned
- RemoteSigned
- Unrestricted
- Bypass
現在の「実行ポリシー」を確認するコマンドレット(Get-ExecutionPolicy)です。
PS C:\Program Files\PowerShell\6.0.3> Get-ExecutionPolicy |
Restricted
Restricted は、ローカル・リモートすべてのスクリプトが実行禁止になります。
- ローカルスクリプト実行 ← 禁止
- リモートスクリプト実行 ← 禁止
AllSigned
AllSigned は、すべてのスクリプトが信頼された発行元により署名されている場合のみ実行可能です。
署名されていないスクリプトは実行禁止になります。
※CA(Certificate Authority)とは「証明機関(デジタル証明書を発行するサーバ)、この場合はルート証明機関」のことを言います。
- ローカルスクリプト実行 ← CA が許可された署名付きスクリプトのみ実行可能
- リモートスクリプト実行 ← CA が許可された署名付きスクリプトのみ実行可能
RemoteSigned
RemoteSigned は、ローカルに保存されているスクリプトは実行可能ですが、インターネットからダウンロードされた非ローカルスクリプトは、信頼された発行元より署名されているもののみが実行可能です。
- ローカルスクリプト実行 ← 実行可能
- リモートスクリプト実行 ← CA が許可された署名付きスクリプトのみ実行可能
Unrestricted
Unrestricted は、すべてのスクリプトが実行可能です。
ただしインターネットからダウンロードされた非ローカルスクリプトは、実行時に実行確認を求められ、ユーザーが許可をすれば実行できます。
- ローカルスクリプト実行 ← 実行可能
- リモートスクリプト実行 ← 実行時に許可を求められ、許可すれば実行可能
Bypass
全くブロックされず、ユーザーへの警告も出力されず、全てのスクリプトが実行可能です。
- ローカルスクリプト実行 ← 実行可能
- リモートスクリプト実行 ← 実行可能
スクリプトファイル(.ps1)を作成して実行する
実際にローカルコンピュータでスクリプトファイル(.ps1)を作成して、スクリプトをリモートで実行します。
ローカルコンピュータで実行する
まずはローカルコンピュータで PS1 スクリプトを実行してみます。
■C:\Program Files\PowerShell\6.0.3 フォルダに作成した場合
【例】単純に「Write-Host」コマンドレットで文字を出力するだけ
PS C:\Program Files\PowerShell\6.0.3> cat .\Test-Write-Host-001.ps1 ← cat コマンドで ps1 ファイルの中身を表示します。 Write-Host “テスト 2018年8月11日” |
「Test-Write-Host-001.ps1」スクリプトを手動実行します。
PS C:\Program Files\PowerShell\6.0.3> .\Test-Write-Host-001.ps1 |
■C:\script フォルダに作成した場合
ローカルのパソコンは Windows 7 を使用していますが、特にパスの設定など環境は全く変更していないのでデフォルトの状態です。
この状態で他のフォルダ(C:\script)にスクリプトファイル(Test-Write-Host-001.ps1)を置いた場合、実行できるのでしょうか。
C: 直後に「script」フォルダを作成します。
C:\script に移動して ps1 スクリプトを実行します。
PS C:\Program Files\PowerShell\6.0.3> cd ‘C:\script\’ ← 「C:\script」フォルダに移動します。 |
特に問題なくスクリプトは実行できました。
パスが通ってなくてエラーになるかと思いましたが、Linuxのように別途実行パスの設定は不要のようです。
「ローカルスクリプト」と「非ローカルスクリプト」の違い
ローカルスクリプトは、ローカルコンピュータに保存されているスクリプトを言います。
例えば、今回の場合は「C:\script\Test-Write-Host-001.ps1」はローカルスクリプトになります。
非ローカルスクリプトは、インターネットからダウンロードした .ps1 スクリプトファイルや、FQDN・IPアドレスから始まる UNC 名を持つスクリプトファイルのことを言います。
リモートコンピュータで PS1 スクリプトを実行する
ローカルコンピュータで PS1 スクリプト実行がうまくいったので、次はリモートコンピュータで PS1 スクリプトを実行してみます。
【例】リモートコンピュータのコンピュータ名を取得するスクリプト
PS C:\script> cat .\Test-Write-Host-ComputerName-001.ps1 |
コマンドを実行してリモートコンピュータでコンピュータ名を取得するスクリプトを実行します。
PS C:\script> Invoke-Command -ComputerName ec2-xxxxxxxxxxxxxxx.ap-northeast-1.compute.amazonaws.com -Credential Administrator -FilePath C:\script\Test-Write-Host-ComputerName-001.ps1 |
バッチから実行する場合
毎回手動でコマンドを実行するのが面倒な場合は、バッチ(.bat)から実行することもできます。
バッチ化するとアイコンをダブルクリックするだけでスクリプトを実行することが出来るようになります。
参考にした技術書
以下の各技術書は、現在インフラ構成管理で利用する PowerShell スクリプトを作成するために読んで勉強している書籍です。
この技術書を読んで、PowerShell が「Linux」で具体的にどのように利用できるかを知りました。
また、基本的な構文(if、switch、while、for、foreach 文など)を非常に細かく解説しています。インターネットで調べれば英語での情報が出てきますが、日本語でここまで細かく解説している技術書はなかなかないため重宝しています。
PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~
「PowerShell 実践システム管理ガイド」という題名の通り、具体的にどのように PowerShell で複数台のサーバーのシステム管理をするのか、具体的なコマンドを詳細に解説しています。
Windows PowerShell実践システム管理ガイド 第3版 (TechNet ITプロシリーズ)
PowerShell で CSV ファイルや Excel を処理するスクリプトが詳しく解説されているので勉強になります。
過去の PowerShell の記事
以前の PowerShell 関連の記事は以下を参照してください。
【PowerShell 6】Windows 7、Windows 2016への PowerShell 6 インストール手順
【PowerShell 6.0】スクリプトの作り方【設定編】【Part.1】
【PowerShell 6.0】スクリプトの作り方【作成編】【Part.2】
【PowerShell 6.0】スクリプトの作り方【実行編】【Part.3】
コメント