.NET Core 版の PowerShell はデフォルトの実行ポリシーが変わってた
◆ デフォルトが RemoteSigned になってる
◆ 設定を変えなくてもローカルの .ps1 ファイルを実行できる
◆ 設定を変えなくてもローカルの .ps1 ファイルを実行できる
Windows 標準の PowerShell ではデフォルトの実行ポリシーが Restricted です
そのせいでローカルの ps1 ファイルを実行しようとするとエラーになります
デフォルトのままにしてる PC では PowerShell で yarn を実行しようとすると yarn.ps1 ファイルを実行しようとしてポリシーのせいでエラーになります
設定を変えたくない環境だと いったん cmd コマンドを実行してコマンドプロンプトにしてから yarn コマンドを実行することで yarn.cmd が実行されてうまく動きます
……なのですが Windows Terminal で実行したときには普通に動きました
cmd にしてたっけ?と思いましたが PowerShell です
Windows Terminal では .NET Core 版の新しいバージョンがデフォルトになるので その違いかもしれません
それぞれの PowerShell で実行ポリシーを確認してみます
忘れてるだけでポリシーを変えてしまったのかもしれないので 念の為 Windows Sandbox 上で行います
Restricted になっています
バージョンは 5.1 です
RemoteSigned になってました
バージョンは 7.0.3 です
RemoteSigned だとローカルのファイルは確認もなく実行できます
リモートのファイルだと署名がある場合のみ実行できます
これは嬉しい変更ですね
あとはデフォルトの PowerShell が .NET Core 版になってくれるといいのですけど
そのせいでローカルの ps1 ファイルを実行しようとするとエラーになります
デフォルトのままにしてる PC では PowerShell で yarn を実行しようとすると yarn.ps1 ファイルを実行しようとしてポリシーのせいでエラーになります
設定を変えたくない環境だと いったん cmd コマンドを実行してコマンドプロンプトにしてから yarn コマンドを実行することで yarn.cmd が実行されてうまく動きます
……なのですが Windows Terminal で実行したときには普通に動きました
cmd にしてたっけ?と思いましたが PowerShell です
Windows Terminal では .NET Core 版の新しいバージョンがデフォルトになるので その違いかもしれません
それぞれの PowerShell で実行ポリシーを確認してみます
忘れてるだけでポリシーを変えてしまったのかもしれないので 念の為 Windows Sandbox 上で行います
通常の PowerShell
まずは通常の PowerShell ですC:\Users\WDAGUtilityAccount>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS C:\Users\WDAGUtilityAccount> Get-ExecutionPolicy
Restricted
PS C:\Users\WDAGUtilityAccount> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.19041.1
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Restricted になっています
バージョンは 5.1 です
.NET Core 版の PowerShell
.NET Core 版の PowerShell をインストールしてから 試してみますPowerShell 7.0.3
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
PS C:\Users\WDAGUtilityAccount> Get-ExecutionPolicy
RemoteSigned
PS C:\Users\WDAGUtilityAccount> $PSVersionTable
Name Value
---- -----
PSVersion 7.0.3
PSEdition Core
GitCommitId 7.0.3
OS Microsoft Windows 10.0.19041
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
RemoteSigned になってました
バージョンは 7.0.3 です
RemoteSigned だとローカルのファイルは確認もなく実行できます
リモートのファイルだと署名がある場合のみ実行できます
これは嬉しい変更ですね
あとはデフォルトの PowerShell が .NET Core 版になってくれるといいのですけど