PowerShell
PowerShell 7.x の利用
Windows 11 に標準搭載されている PowerShell 5.x は「古い」PowerShellで,文字コード周りが古い仕様となっています.まず,PowerShell のバージョンを確認します.
PS C:\Users\rinsaka> $PSVersionTable ⏎ Name Value ---- ----- PSVersion 5.1.26100.4768 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.26100.4768 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 PS C:\Users\rinsaka>
PowerShell の出力はオブジェクト形式であるので,次のようにするとバージョン番号だけを取得できます.
PS C:\Users\rinsaka> $PSVersionTable.PSVersion ⏎
Major Minor Build Revision
----- ----- ----- --------
5 1 26100 4768
PS C:\Users\rinsaka>
新しい PowerShell である PowerShell 7.x はクロスプラットフォームで動作し,UTF-8 にも対応しています.PowerShell 7.x は公式ダウンロードページ (https://github.com/PowerShell/PowerShell/releases/latest) からダウンロードしてインストールできますが,「winget
」を使う方法が簡単でしょう.まず,「winget
」が利用できるかそのバージョンを確認します.バージョンが表示されず「認識されません」とでた場合は,Microsoft Store から App Installer を入れる必要があります.
PS C:\Users\rinsaka> winget --version ⏎
v1.11.430
PS C:\Users\rinsaka>
PowerShell 7.x の最新版をインストールします.
PS C:\Users\rinsaka> winget install --id Microsoft.Powershell --source winget ⏎
見つかりました PowerShell [Microsoft.PowerShell] バージョン 7.5.2.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/PowerShell/PowerShell/releases/download/v7.5.2/PowerShell-7.5.2-win-x64.msi
██████████████████████████████ 107 MB / 107 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
PS C:\Users\rinsaka>
インストールできたら,PowerShell 7 を起動します.起動後にバージョンが表示さているはずですが,改めてバージョンを確認します.
PowerShell 7.5.2 PS C:\Users\rinsaka> $PSVersionTable ⏎ Name Value ---- ----- PSVersion 7.5.2 PSEdition Core GitCommitId 7.5.2 OS Microsoft Windows 10.0.26100 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0 PS C:\Users\rinsaka> $PSVersionTable.PSVersion ⏎ Major Minor Patch PreReleaseLabel BuildLabel ----- ----- ----- --------------- ---------- 7 5 2 PS C:\Users\rinsaka>
「Invoke-RestMethod
」を用いて API にリクエストを送信してみます.日本語文字も文字化けすることなく表示されました.
PS C:\Users\rinsaka> Invoke-RestMethod -Uri "http://127.0.0.1:8000/comments/1/" ⏎
id title body updated_at
-- ----- ---- ----------
1 最初のコメント コメントの本文 2022/07/01 12:00:00
PS C:\Users\rinsaka>
変数を利用すると必要な情報だけを取り出すことができます.たとえば本文 (body) だけを抽出してみます.
PS C:\Users\rinsaka> $response = Invoke-RestMethod -Uri "http://127.0.0.1:8000/comments/1/" ⏎ PS C:\Users\rinsaka> $body = $response.body ⏎ PS C:\Users\rinsaka> $body ⏎ コメントの本文 PS C:\Users\rinsaka>
結果を JSON ファイルに出力して,その内容を表示してみます.
PS C:\Users\rinsaka> Invoke-RestMethod -Uri "http://127.0.0.1:8000/comments/1/" -OutFile Documents\ps\results.json ⏎ PS C:\Users\rinsaka> Get-Content Documents\ps\results.json ⏎ {"id":1,"title":"最初のコメント","body":"コメントの本文","updated_at":"2022-07-01T12:00:00"} PS C:\Users\rinsaka>
PowerShell 7 の「Set-Location
」コマンドレットは,パスを省略するとホームディレクトリに戻ります.これは,bash の「cd
」コマンドと同じ動作です.
PS C:\Users\rinsaka> Set-Location Documents\ps ⏎ PS C:\Users\rinsaka\Documents\ps> Set-Location ⏎ PS C:\Users\rinsaka>