up:: Programming

環境変数はターミナル再起動しないと反映されない。

カレントディレクトリをエクスプローラーで開く

Invoke-Item .ii .が一番早い。

環境変数

echo $Env:名前
Get-Itemと等価。
直接$Env:名前でも出るっぽい。

WindowsのPowerShellで環境変数の確認 PowerShell - Qiita

全部見る場合は以下。
プロセス。
Get-ChildItem Env:
永続。
[Environment]::GetEnvironmentVariables('User') | Format-Table -AutoSize -Wrap

ただしGet-ChildItem Env:はプロセスの再起動後でないと設定が反映されないことに注意。

一時追加

powershellを開いている間しか反映されない。

$Env:名前 = "パス"

+=にすると追加できる。
名前変更ならRename-Item。

永続

[Environment]::SetEnvironmentVariable("環境変数の名前", '環境変数の値', 'User')
システム環境変数に書き込む場合はUserをMachineにする。
その場合は管理者権限が必要。
PowerShellでWindows環境変数を“一覧確認・作成・変更・削除”する方法

余談

powershellは$PROFILEのスクリプトを起動時に読んでいる。.bashrcみたいな。
権限により置き場所が違うので$PROFILE | Format-List -Forceで確認。

ここに一時追加のコードを書いておけば、powershellの中でだけ特定の環境変数を扱える。

パス

表示
一時
$Env:Path.split(";")
永続
[Environment]::GetEnvironmentVariables('User').Path.split(";")

追加
$ENV:Path+=";追加したいパス" Set-Item Env:Path $Env:Path”;追加したいパス”`

永続

$new_dir = "パス"
 
$new_path = [Environment]::GetEnvironmentVariable("Path", "User")
$new_path += ";$new_dir"
[Environment]::SetEnvironmentVariable("Path", $new_path, "User")

Windows10/11でPowerShellからパスを通す (環境変数PATHの変更) Windows - Qiita

長い場合は$PROFILEに関数を追加する手がある。

function add_path {
    param ([string]$new_path)
 
    $new_path = $new_path -replace '/', '\'
 
    # フォルダが存在しないなら終了
    if (-not (Test-Path -Path $new_path -PathType Container)) {
        Write-Output  "指定されたパスのフォルダは存在しません: $new_path"
        return
    }
 
    # 環境変数Pathを取得 (ユーザー)
    $user_path = [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::User)
 
    # すでに追加済みであれば終了
    if ($user_path -like "*$new_path*") {
        Write-Output  "パスはすでに環境変数に存在します: $new_path"
        return
    }
 
    # パスを追加
    if (-not $user_path.EndsWith(";")) {
      $user_path += ";"
    }
    $user_path += $new_path
    [Environment]::SetEnvironmentVariable("Path", $user_path, [EnvironmentVariableTarget]::User)
 
    Write-Output "新しいパスをユーザー環境変数に追加しました: $new_path"
}
 
function show_path {
  [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::User).Split(";")
}
 

Windowsの環境変数にパスを追加する関数(PowerShell) Windows - Qiita

アプリにファイルを開かせる

& "アプリのパス" "対象ファイルのパス"

コメント

#<# #>
PowerShell: コメントの記述方法

Grepと前後表示

Select-Stringが相当。あるいはsls
-Context 上,下で前後表示。

PowerShell/Select-Stringで検索した前後の行を表示する方法 - Windowsと暮らす

コマンドについて調べる

Get-help。エイリアスが分かるので便利。
これ自体を調べるとエイリアスは無いと言われるがhelpが通った。

wget

Invoke-WebRequest,iwr
-OutFileを付けないとファイルとして保存できない。

ファイルハッシュ

Get-FileHash-Algorithm md5でmd5を出せる。
デフォはSHA256。

コマンドの場所(which)

Get-Commandgcm
そのままだと見切れるので| flでフォーマットリストにする。

PowerShellでwhichコマンド PowerShell - Qiita

一応、(gcm command).pathとしてパスを取ることもできる。

Where-Ovjectというのがあるが、これはオブジェクトコレクションのフィルター用。
Where-Object - PowerShellコマンドレット虎の巻
where.exeというので場所を調べることもできるが、これはcmd用。

Write-HostとWrite-Output

Write-Hostはコンソール表示用。Write-Outputはパイプ用。

文字化けする

UTF-8のBOM付きでセーブ。

foreach

foreach (a in b){}で回せるが、パイプ使ってa | ForEach-Object {command $_}という手もある。

exe実行

Invoke-ExpressionStart-Processがある。
Invoke-Expression&という簡単なエイリアスがある。
Start-Process-Waitで同期実行できる。代わりに-FilePathを付けてパスを指定しないといけない。引数も-ArgumentListが要る。
【PowerShell】他プロセスの実行方法まとめ - Tumbling Dice
【PowerShell】外部プログラムを実行する方法 PowerShell - Qiita

powershell実行

pwsh

プロセス止める

Stop-Process
プロセス自体はGet-Processで探せる。
【Stop-Process】PowerShellでプロセスを強制終了させる方法とは? | チェシャわら

Host

powershellエンジンを動かしているインターフェース。
通常のHostはConsoleHost。例えばリモートセッションで使用するホストはServerRemoteHost。

アプリが使用するインターフェースも含むので、LinuxのTerminalより少し広めの概念。

Felo(フェロー)- 無料のAI検索エンジン

ファイルのフルパスがほしい

$(Get-Item file).FullName

PSScriptTools

便利なPowershellのコマンド詰め合わせ。
Show-Tree目当て。

Powershellギャラリーというところからインストールできる。
Install-Module PSScriptTools

消すときは若干面倒。

Get-Module PSScriptTools | Remove-Module
Uninstall-Module PSScriptTools -AllVersions

GitHub - jdhitsolutions/PSScriptTools: :wrench: A set of PowerShell functions you might use to enhance your own functions and scripts or to facilitate working in the console. Most should work in both Windows PowerShell and PowerShell 7, even cross-platform. Any operating system limitations should be handled on a per command basis. The Samples folder contains demonstration script files

再帰的にフォルダを作成

ni -ItemType Directory -Path path
ちゃんと-Pathでパス指定する。

【PowerShell】空のフォルダを再帰的に作成する方法 | 秋拓技術学院

オブジェクトの型が知りたい

| get-member

パスの親がほしい

| split-path -parent

コマンドの親フォルダを開く

$(gcm pwsh).Source | split-path -parent | ii

startup

Windows10/11のスタートアップフォルダの場所と開き方【追加/削除も】

C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp