1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows環境のPowerShellでインターネットからダウンロードしたスクリプトの扱いについて

Posted at

以前、Windowsでインターネットからダウンロードしたファイルのブロックについてについて記事を書きました。

WindowsのEdgeなどでインターネットからダウンロードしたファイルには、代替データストリームが追加され外部から取得したファイルとして判別されます

PowerShellでは、ps1スクリプトファイルにこの代替データストリームがついている場合。
実行ポリシーによってスクリプト実行時の動作が変わるため説明します。

実行ポリシーについて

代替データストリームがついているps1ファイルを用意する

どこか外部にps1ファイルを配置して、ブラウザでダウンロードして用意する方法もありますが。
ローカル端末のみで下記コマンドを実行すると、代替データストリームが付与されているファイルを生成できます。

New-Item -Value "Write-Host HelloWorld" -Path Helloworld.ps1 | Set-Content -Stream "Zone.Identifier" -Value @("[ZoneTransfer]","ZoneId=3")

上記コマンドを実行すると下記ファイルが作成されます。

image.png

今回はこのファイルをWindows環境のPowerSHellに用意されている、実行ポリシーで実行して動作を確認します。

実行環境

  • Windows 10 21H2
  • PowerShell 7.4.0-preview.1
  • Windows PowerShell 5.1.19041.2364

実行環境のスコープについて

image.png

今回、実行している端末の実行ポリシー設定については下記となります。

Scope ExecutionPolicy
MachinePolicy Undefined
UserPolicy Undefined
Process UndefinedD
CurrentUser RemoteSigned
LocalMachine RemoteSigned

PowerShellの実行ポリシーについて

Windows環境ではPowerShellの実行ポリシーは下記の種類があります。

  • AllSigned
  • Bypass
  • Default
  • RemoteSigned
  • Restricted
  • Undefined
  • Unrestricted

今回は下記のように、プロセススコープを対象にして実行ポリシーを設定してスクリプトを実行します。

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process
./Helloworld.ps1

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
./Helloworld.ps1

Set-ExecutionPolicy -ExecutionPolicy Default -Scope Process 
./Helloworld.ps1

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
./Helloworld.ps1

Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope Process
./Helloworld.ps1

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope Process
./Helloworld.ps1

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
./Helloworld.ps1

実行結果(PowerShell 7)
image.png

実行結果画像を確認すると、BypassUnrestricted除いて他の実行ポリシーでは代替データストリームが付与されたスクリプトファイル(外部から取得したスクリプト)は実行失敗していることがわかります。

Bypassについては無条件でスクリプトが実行されていますが、Unrestrictedについては警告が表示され、実行前に確認が入ります。

またWindows PowreShellでも同様の結果となります。

気をつけたいこと

PowerShellスクリプトをWindows端末やサーバーに配置する際。

実行ポリシーとスクリプトファイルの状態によっては、実行が失敗してしまうことがあります。

意図しないエラーを防ぐためにも、環境を準備する際には確認したいポイントです。

総評

PowerShellの実行ポリシーについては、過去苦しめられた人も多く。
PowerShellが嫌われる要因の一つな気もします。

実行ポリシーはWindows以外の環境の場合は、Unrestrictedしかありませんが。Windows環境の場合は色々と選択肢があるので適切に設定して利用したい所です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?