Open5

PowerShellメモ

きくぴぃきくぴぃ

パッケージマネージャー scoopを導入する

  • 標準搭載されているwingetにないパッケージをインストールするため
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

https://scoop.sh/

cowsayをインストールしてみる

  • scoop search cowsay
    • 検索したら見つかった
  • scoop install cowsay

使用してみる

cowsay hello

< hello >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

かわいいね

きくぴぃきくぴぃ

バージョン確認

Windows PowerShell(PS) のバージョン確認方法

  • $PSVersionTableを入力
  • PSVersionってのがPowerShellのバージョン
Name                           Value
----                           -----
PSVersion                      7.5.1
PSEdition                      Core
GitCommitId                    7.5.1
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
きくぴぃきくぴぃ

なんか2つある

Windows PowerShell 5.1 と PowerShell 7.x の相違点

  1. pwsh
  2. WindowsPowerShell
  • 基本的にpwshの方使ったほうがいいみたい

pwsh

  • こっちが最新ぽい
  • クロスプラットフォーム対応しているっぽい

WindowsPowerShell

  • 5.1バージョンで古め
  • 古いWindows環境依存のものに使ったりするっぽい?

比較

AI引用

比較項目 Windows PowerShell (powershell) PowerShell Core / PowerShell 7+ (pwsh)
実行ファイル名 powershell.exe pwsh
バージョン 1.0 ~ 5.1 6.0 ~ 現在
ベース技術 .NET Framework .NET Core / .NET
対応OS Windowsのみ Windows, macOS, Linux
開発形態 クローズド オープンソース
推奨される用途 レガシーシステムやWindows専用管理 モダンでクロスプラットフォームな用途
きくぴぃきくぴぃ

コマンドプロンプトとの違い

構文

  • cmd:レガシーな構文
    • linuxとかの構文と似ているので、こっちのほうが使いやすそう
dir
  • pwsh:.NET ベースでわかりやすい
    • モダンな感じがするが、冗長さがある
    • オブジェクトの操作ができる
Get-ChildItem
きくぴぃきくぴぃ

オブジェクト操作

  • pwshはオブジェクト操作とかが使える
    • ファイルの名前や更新日付の取得などがしやすいみたい
$files = Get-ChildItem
$files[0] | Get-Member
Name       Property     string Name { get; }
Length     Property     long Length { get; }
LastWriteTime Property  datetime LastWriteTime { get; }
...

カスタムオブジェクト作成

  • オブジェクトを作成できるっぽい
  • オブジェクト指向を利用したコマンド操作ができる
# カスタムオブジェクトの作成
$person = [PSCustomObject]@{
    Name = "Taro"
    Age = 30
}
$person.Name  # => "Taro"

for-each

  • オブジェクトの繰り返し処理などもいい感じに使える
  • C#っぽい構文
$fruits = @("apple", "banana", "orange")
foreach ($fruit in $fruits) {
    Write-Host "果物:$fruit"
}