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-Command。gcm
そのままだと見切れるので| 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-ExpressionとStart-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より少し広めの概念。
ファイルのフルパスがほしい
$(Get-Item file).FullName
PSScriptTools
便利なPowershellのコマンド詰め合わせ。
Show-Tree目当て。
Powershellギャラリーというところからインストールできる。
Install-Module PSScriptTools。
消すときは若干面倒。
Get-Module PSScriptTools | Remove-Module
Uninstall-Module PSScriptTools -AllVersions再帰的にフォルダを作成
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