基本
コマンドとヘルプ
Get-Help Get-Process # show help for cmdlet Get-Help Get-Process -Online # open online docs Get-Command *service* # find commands by name Get-Alias ls # show alias target
よく使うエイリアス
ls → Get-ChildItemファイルとディレクトリを一覧表示
cd → Set-Locationディレクトリを変更
cp → Copy-Itemファイルまたはディレクトリをコピー
mv → Move-Item移動またはリネーム
rm → Remove-Itemファイルまたはディレクトリを削除
cat → Get-Contentファイルの内容を読み取り
echo → Write-Outputパイプラインに出力
cls → Clear-Hostコンソールをクリア
変数
変数の基本
$name = "Alice" # string $count = 42 # integer $pi = 3.14 # double $list = @(1, 2, 3) # array $hash = @{a=1; b=2} # hashtable
自動変数
$_現在のパイプラインオブジェクト
$PSVersionTablePowerShellのバージョン情報
$HOMEユーザーのホームディレクトリ
$PWD現在のディレクトリ
$nullNull値
$true / $false真偽値定数
$Error最近のエラーの配列
$LASTEXITCODE最後のネイティブコマンドの終了コード
環境変数
$env:PATH # read env var $env:MY_VAR = "value" # set env var Get-ChildItem Env: # list all env vars
演算子
比較演算子
-eq -ne等しい / 等しくない
-gt -ltより大きい / より小さい
-ge -le以上 / 以下
-like -notlikeワイルドカードマッチ(*?
-match -notmatch正規表現マッチ
-containsコレクションが値を含む
-in -notinコレクション内の値
論理演算子とその他
-and -or -not論理演算子
!論理NOT(エイリアス)
-replace正規表現置換:'hi' -replace 'h','b'
-split -join文字列を分割 / 結合
..範囲:1..5 → 1,2,3,4,5
?:三項演算子(v7+):$x ? 'yes' : 'no'
制御フロー
if / elseif / else
if ($age -ge 18) { "Adult" } elseif ($age -ge 13) { "Teen" } else { "Child" }
switch
switch ($color) { "red" { "Stop" } "green" { "Go" } default { "Unknown" } }
ループ
foreach ($item in $list) { $item } for ($i=0; $i -lt 5; $i++) { $i } while ($x -lt 10) { $x++ } 1..5 | ForEach-Object { $_ * 2 }
関数
関数の定義
function Get-Greeting { param([string]$Name = "World") "Hello, $Name!" } Get-Greeting -Name "Alice"
高度なパラメータ
function Copy-SafeFile { [CmdletBinding()] param( [Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][string]$Dest ) Copy-Item $Path $Dest -WhatIf:$WhatIfPreference }
オブジェクトとパイプライン
パイプラインの基本
Get-Process | Sort-Object CPU -Desc | Select-Object -First 5 Get-Service | Where-Object Status -eq "Running" Get-ChildItem | Measure-Object -Property Length -Sum
主要なパイプラインコマンドレット
Where-Objectオブジェクトをフィルタリング:| Where {$_.CPU -gt 10}
Select-Objectプロパティを選択:| Select Name, CPU
Sort-Objectソート:| Sort CPU -Desc
ForEach-Object各要素を変換:| ForEach {$_.Name}
Measure-Objectカウント、合計、平均、最小、最大
Group-Objectプロパティ値でグループ化
Format-Tableテーブルとして表示:| ft -Auto
Export-CsvCSVにエクスポート:| Export-Csv out.csv
ファイル
ファイル操作
Get-Content log.txt # read file Set-Content out.txt "hello" # write (overwrite) Add-Content out.txt "more" # append Get-Content log.txt | Select-String "error" # grep
パスとファイルのコマンドレット
Test-Path $pathファイル/ディレクトリの存在確認
New-Item -Type Fileファイルを作成
New-Item -Type Directoryディレクトリを作成
Resolve-Path絶対パスを取得
Join-Pathパスセグメントを結合
Split-Path親またはリーフを取得
Get-ItemPropertyファイルの属性とメタデータ
Remove-Item -Recurseディレクトリを再帰的に削除
文字列
文字列の基本
"Hello, $name" # interpolation (double quotes) 'Hello, $name' # literal (single quotes) "Length: $($list.Count)" # expression in string @" Multi-line here-string with $name "@
文字列メソッド
.ToUpper() / .ToLower()大文字/小文字に変換
.Trim()前後の空白を削除
.Split(',')配列に分割
.Replace('a','b')部分文字列を置換
.StartsWith() / .EndsWith()プレフィックス / サフィックスを確認
.Substring(0,5)部分文字列を抽出
.Contains('text')含むか確認
-f operator'{0} is {1}' -f 'sky','blue'
モジュール
モジュールの管理
Get-Module -ListAvailable # installed modules Find-Module -Name Az* # search gallery Install-Module -Name Pester # install from gallery Import-Module ActiveDirectory # load module
モジュールコマンド
Get-Moduleロード済みモジュールを一覧表示
Import-Moduleセッションにモジュールをロード
Remove-Moduleセッションからモジュールをアンロード
Update-Moduleインストール済みモジュールを更新
Get-Command -Module Xモジュール内のコマンドを一覧表示
$env:PSModulePathモジュールの検索パス
よくあるパターン
エラー処理
try { Get-Item "C:\missing" -ErrorAction Stop } catch { "Error: $_" } finally { "Cleanup here" }
実行ポリシーとリモート処理
Get-ExecutionPolicy現在のスクリプトポリシーを表示
Set-ExecutionPolicy RemoteSignedローカルスクリプトを許可
Enter-PSSession -Computer SRV1インタラクティブなリモートセッション
Invoke-Command -Computer SRV1 -Script {}スクリプトブロックをリモートで実行
Start-Job { long-task }バックグラウンドジョブを実行
Receive-Job -Id 1バックグラウンドジョブの出力を取得