PowerShell Preview を使い始めた
PowerShell 7.6.0-preview.6
刺激を求めて PowerShell の Preview(v7.6.0-preview.6) を使うように変えた。
CLI での install には Chocolatey か WinGet が使える。
ただ Chocolatey では prerelease で提供されてるので choco pin してないと choco upgrade all すると stable に落ちてしまう。
これは面倒なので今回は winget を使うようにした。
install したときは PowerShell 7.6.0-preview.5 までしか winget の community repo に存在しなかった。
でもタイミングよくすぐ更新されて PowerShell 7.6.0-preview.6 が降ってきた。
以下のコマンドを実行すればよい。
winget install --id Microsoft.PowerShell.Preview
あと Windows Terminal でも GitHub Copilot Chat が使いたくて Canary に変えた。 これは仕事用の PC では既に切り替えてあるので、そちらと合わせる意味もある。 変えてからあんまり積極的に Windows Terminal で GitHub Copilot Chat を使ってるわけではないけど、いつも質問できる安心感的なのを得るためだ。
Windows Terminal Canary は chocolatey や winget では入れられない。
なので自前で installer を download して起動するよう関数を profile に用意してる。
いま単に installer を起動するだけにしてるが、どうも Add-AppxPackage が使えるみたい。
それができたら installer の削除まで一貫して行えるので、次回試してみたい。コメントアウトしてるところがそれだ。
function Install-WindowsTerminalCanary {
$installer = 'Microsoft.WindowsTerminalCanary.appinstaller'
Invoke-WebRequest 'https://aka.ms/terminal-canary-installer' -OutFile 'Microsoft.WindowsTerminalCanary.appinstaller'
Start-Process $installer
# try {
# Add-AppxPackage -AppInstallerFile $installer
# }
# finally {
# Remove-Item $installer -Force -ErrorAction SilentlyContinue
# }
}
PowerShell Preview に入れ替えたら、 Windows Terminal の profile にちょっと工夫が必要だった。
PowerShell の stable を入れてたときは "source": "Windows.Terminal.PowershellCore" だけで Preview を使えてた。
けど stable を消したら認識しなくなってしまった。なので個別に指定する必要があるみたい。
以下は GUI から操作して生成させたものなので、ひょっとしたら公式かどっかに落ちてる情報なのかな。
{
"colorScheme": "Solarized Dark - Patched",
"guid": "{a3a2e83a-884a-5379-baa8-16f193a13b21}",
"hidden": false,
"name": "PowerShell 7 Preview",
// "source": "Windows.Terminal.PowershellCore",
"commandline": "\"C:\\Program Files\\PowerShell\\7-preview\\pwsh.exe\"",
"icon": "ms-appx:///ProfileIcons/pwsh-preview.png",
"startingDirectory": "%USERPROFILE%",
"tabColor": "#001E27"
},
Preview に入れ替えたせいか知らんが Get-ExperimentalFeature の出力が変わったような。最近見てなかったから定かではない。
これまで更新してきた分の残骸かな?
> Get-ExperimentalFeature | Format-List
Name : PSLoadAssemblyFromNativeCode
Enabled : True
Source : PSEngine
Description : Expose an API to allow assembly loading from native code
Name : PSProfileDSCResource
Enabled : False
Source : PSEngine
Description : DSC v3 resources for managing PowerShell profile.
Name : PSSerializeJSONLongEnumAsNumber
Enabled : True
Source : PSEngine
Description : Serialize enums based on long or ulong as an numeric value rather than the string
representation when using ConvertTo-Json.
いま powershell.config.json に入ってるものは以下(整形済み)だった。随分多いな。
{
"ExperimentalFeatures": [
"PSFeedbackProvider",
"PSCommandNotFoundSuggestion",
"PSSubsystemPluginModel",
"PSLoadAssemblyFromNativeCode",
"PSNativeWindowsTildeExpansion",
"PSSerializeJSONLongEnumAsNumber"
]
}
以下を見るに 7.5, 7.6 で mainstream になった feature が残ってたみたい。
Using Experimental Features in PowerShell - PowerShell | Microsoft Learn
experimental からなくなった feature は取り除いておいた。
最後に winget で管理してる application が増えたので更新のタイミングがわかりやすいよう profile に仕込んでみた。 以下がこれまでに winget で入れるようになったもの。
Microsoft.OpenSSH.PreviewMicrosoft.PowerShell.PreviewMicrosoft.VisualStudioCode.Insiders
if (Get-Command Get-WinGetPackage -ErrorAction SilentlyContinue) {
@(
'Microsoft.VisualStudioCode.Insiders'
'Microsoft.OpenSSH.Preview'
'Microsoft.PowerShell.Preview'
) | ForEach-Object {
$pkg = Get-WinGetPackage -Id $_
if (($pkg -and $pkg.IsUpdateAvailable)) {
Write-Warning "💡 Newer '${_}' is available. $($pkg.AvailableVersions | Where-Object {
[version]$_ -gt [version]$pkg.InstalledVersion
} | Sort-Object -Descending | Select-Object -First 1)"
}
}
}
Microsoft.WinGet.Client で簡単に操作できるのがありがたい。
パッと見 AvailableVersions は降順に並ぶようだけど並び替えと絞り込みを入れておいた。
Get-WinGetPackage が使えるかもチェックしている。
これで更新があれば PowerShell 起動時にログが出て多分気付ける。 その後の更新は command prompt から手で実行することになる想定。未だに PowerShell 内から PowerShell を更新する良い手順を知らない。
特に違いも感じずまだ刺激になってないけど、これからは preview を使っていこう。 VS Code も GitHub Copilot の機能をいち早く使うため Insider にしてるし、なんか unstable だれけになりつつある。