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
参考
- Set-ExecutionPolicy Windows PowerShell 実行ポリシーに対するユーザー設定を変更します
- Invoke-Command ローカルとリモートのコンピューターでコマンドを実行します