[ PowerShell ] ps スクリプトをローカルおよびリモートホストで実行する

Pocket

PowerShell は UNIX のシェルと操作性も近く、コマンドも多数のエイリアスが切られているため ls コマンドも UNIX 感覚で使用することもできます。また、PowerShell でも任意のシェルスクリプトを作成して実行することができますが、PowerShell はデフォルトでスクリプトファイルの実行が禁止されています。

スポンサーリンク

例えば、次のような 1行だけのスクリプトを作成して実行してみます。ファイル名は Get-ExecutionPolicy.ps1 とします。

Get-ExecutionPolicy

実行結果

PS E:\> .\Get-ExecutionPolicy.ps1
スクリプトの実行がシステムで無効になっているため、ファイル E:\Get-ExecutionPolicy.ps1 を読み込めません。詳細については
、「get-help about_signing」と入力してヘルプを参照してください。
発生場所 行:1 文字:26
+ .\Get-ExecutionPolicy.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) []、PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

スクリプトの実行権限を与える  Set-ExecutionPolicy

スクリプトの実行権がないためにエラーになっています。実行権限を与えるには Set-ExecutionPolicy コマンドを使用します。

PS E:\> Set-ExecutionPolicy RemoteSigned
PS E:\> .\Get-ExecutionPolicy.ps1
RemoteSigned

ローカルホストでシェルスクリプトを実行するにはこれで準備が整いました。

リモートホストでシェルスクリプトを実行する

まずは、リモートホスト上でスクリプトブロックを実行してみます。スクリプトブロックを実行するには Invoke-Command コマンドレットを使用します。下記のサンプルでは Get-ExecutionPolicy を実行しているだけです。

PS E:\> $sess = New-PSSession -ComputerName masao-pc -Credential masao-pc\masao
PS E:\> Invoke-Command -Session $sess -ScriptBlock {Get-ExecutionPolicy}

PSComputerName      RunspaceId                      PSShowComputerName Value
--------------      ----------                      ------------------ -----
masao-pc            330441cc-f395-4cca-8683-4e...                 True Restricted

ローカルホスト上のスクリプト ( .ps ) をリモートホストで実行する

次に、ローカルホストにあるスクリプトファイルをリモートホストで実行します。Invole-Command コマンドレットの -FilePath でローカルファイルを指定してます。

PS E:\> $sess = New-PSSession -ComputerName masao-pc -Credential masao-pc\masao
PS E:\> Invoke-Command -Session $sess -FilePath .\Get-ExecutionPolicy.ps1

PSComputerName       RunspaceId                         PSShowComputerName Value
--------------       ----------                         ------------------ -----
masao-pc           330441cc-f395-4cca-8683-4e...                    True Restricted

リモートホスト上の実行ポリシーが Restricted であるにも関わらずスクリプトブロックおよびローカルホスト上にあるシェルスクリプトファイル ( .ps ) の実行は成功しています。リモートホスト上であろうと、ローカルホストの実行ポリシーが優先されるためです。このとき、ローカルホスト上の実行ポリシーは RemoteSigned でした。リモート接続で認証は成功しているので理由だと思われます。

もちろん、ローカルホストの実行ポリシーを Restricted に戻した場合には、リモートホスト上でのシェルスクリプトファイルの実行はエラーとなります。

PS E:\> $sess = New-PSSession -ComputerName masao-pc -Credential masao-pc\masao
PS E:\> Invoke-Command -Session $sess -FilePath .\Get-ExecutionPolicy.ps1
Invoke-Command : スクリプトの実行がシステムで無効になっているため、ファイル E:\Get-ExecutionPolicy.ps1 を読み込めません
。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
発生場所 行:1 文字:15
+ Invoke-Command <<<<  -Session $sess -FilePath .\Get-ExecutionPolicy.ps1
    + CategoryInfo          : NotSpecified: (:) [Invoke-Command]、PSSecurityException
    + FullyQualifiedErrorId : RuntimeException,Microsoft.PowerShell.Commands.InvokeCommandCommand
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *