「PowerShellで変数に入れた値をどうやって確認するの?」
「変数の中身を見たいだけなのにやり方がわからない」
「エラーが出るけど、どこで変数が間違っているのかチェックしたい」
そんな疑問を持つ方は多いです。
PowerShellでスクリプトを書いていると、変数に正しい値が入っているかどうか確認したくなることがよくあります。
他のプログラミング言語では複雑な書き方が必要な場合もありますが、PowerShellでは変数に格納したデータを画面に表示する方法がとても簡単です。
この記事では、変数の基本的な表示方法から、少し便利な整形表示、さらには実際の業務で使える応用テクニックまで、初心者の方にもわかるように丁寧に解説します。
PowerShellの変数とは?

変数の基本概念
変数って何?
変数とは、データを一時的に保存しておく箱のようなものです。
日常生活での例え:
- メモ帳:情報を書いて後で見返す
- 引き出し:物を入れて名前をつけて管理
- ラベル付きの箱:中身がわかるように名前をつける
PowerShellでも同じように、データに名前をつけて管理できます。
変数の作り方
基本的な書き方
PowerShellでは $
をつけて変数を作ります。
$name = "PowerShell"
$number = 42
$isActive = $true
作成される変数の説明
$name:
- 文字列(String)型
- 値:
"PowerShell"
- 用途:名前やメッセージの保存
$number:
- 数値(Integer)型
- 値:
42
- 用途:計算や カウンタとして使用
$isActive:
- 真偽値(Boolean)型
- 値:
$true
(または$false
) - 用途:フラグやスイッチとして使用
変数名のルール
使える文字:
- 英字:
a-z
、A-Z
- 数字:
0-9
(先頭は不可) - アンダースコア:
_
良い例:
$userName = "田中"
$file_path = "C:\temp\data.txt"
$count1 = 10
悪い例:
$2users = "NG" # 数字で始まっている
$user-name = "NG" # ハイフンは使えない
$user name = "NG" # スペースは使えない
PowerShellの変数の特徴
型の自動判定
PowerShellは動的型付け言語です。
$value = "123" # 文字列として保存
$value = 123 # 数値に変更
$value = Get-Date # 日付オブジェクトに変更
変数の型は、代入する値によって自動的に決まります。
大文字小文字を区別しない
$Name = "太郎"
$name = "花子" # 同じ変数($Name)を上書き
$NAME = "次郎" # 同じ変数($Name)を上書き
結果:$name
の中身は "次郎"
になります。
変数の中身を表示する最も簡単な方法

単に変数名だけ書く
基本的な使い方
PowerShellでは、ただ変数名を書くだけで中身が表示されます。
$name = "PowerShell"
$name
実行結果:
PowerShell
なぜこれで表示されるの?
PowerShellは**REPL(Read-Eval-Print Loop)**という仕組みを採用しています。
REPLの動作:
- Read:コマンドを読み取る
- Eval:コマンドを評価・実行する
- Print:結果を画面に出力する
- Loop:これを繰り返す
そのため、行に変数だけ書くと、自動的にその値を画面に出力してくれます。
複数の変数を一度に表示
$firstName = "田中"
$lastName = "太郎"
$age = 25
# 一行ずつ表示
$firstName
$lastName
$age
実行結果:
田中
太郎
25
計算結果も同様に表示
$a = 10
$b = 20
$a + $b
実行結果:
30
カンマ区切りで複数変数を同時表示
$name = "PowerShell"
$version = "7.3"
$year = 2023
# 複数の変数を一行で表示
$name, $version, $year
実行結果:
PowerShell
7.3
2023
Write-Host で文字列と一緒に表示する

基本的な使い方
メッセージと組み合わせて表示
$name = "PowerShell"
Write-Host "ようこそ、$name さん"
実行結果:
ようこそ、PowerShell さん
文字列内での変数展開
PowerShellでは、ダブルクォート内で変数が自動的に展開されます。
$user = "田中"
$age = 25
Write-Host "ユーザー名:$user、年齢:$age歳"
実行結果:
ユーザー名:田中、年齢:25歳
シングルクォートとダブルクォートの違い
ダブルクォート:変数が展開される
$name = "PowerShell"
Write-Host "こんにちは、$name" # 展開される
シングルクォート:変数が展開されない
$name = "PowerShell"
Write-Host 'こんにちは、$name' # そのまま表示
実行結果:
こんにちは、PowerShell
こんにちは、$name
Write-Hostの便利な機能
色付きで表示
$status = "成功"
Write-Host "処理が完了しました:$status" -ForegroundColor Green
色の選択肢:
Black
、Blue
、Cyan
、DarkBlue
、DarkCyan
DarkGray
、DarkGreen
、DarkMagenta
、DarkRed
DarkYellow
、Gray
、Green
、Magenta
、Red
White
、Yellow
背景色も指定
$error = "エラーが発生しました"
Write-Host $error -ForegroundColor White -BackgroundColor Red
改行なしで表示
$name = "太郎"
$age = 25
Write-Host "名前:$name " -NoNewline
Write-Host "年齢:$age歳"
実行結果:
名前:太郎 年齢:25歳
実用的な使用例
プログレス表示
$total = 100
for ($i = 1; $i -le $total; $i++) {
$percent = ($i / $total) * 100
Write-Host "処理中... $percent%" -ForegroundColor Yellow
# 何らかの処理
Start-Sleep -Milliseconds 50
}
Write-Host "完了!" -ForegroundColor Green
エラーと正常処理の区別
$file = "C:\example.txt"
if (Test-Path $file) {
Write-Host "ファイルが見つかりました:$file" -ForegroundColor Green
} else {
Write-Host "ファイルが見つかりません:$file" -ForegroundColor Red
}
Write-Output で他のコマンドへ渡せる形で出力

Write-OutputとWrite-Hostの違い
Write-Hostの特徴
- 画面表示専用:コンソールに直接表示
- パイプライン通らない:他のコマンドに渡せない
- 色付け可能:見た目を美しくできる
Write-Outputの特徴
- オブジェクトとして出力:PowerShellのパイプラインを通る
- 他のコマンドに渡せる:データの連携が可能
- リダイレクト可能:ファイルに保存できる
基本的な使い方
$name = "PowerShell"
Write-Output $name
実行結果:
PowerShell
見た目は変数名だけを書いた場合と同じですが、内部的には異なります。
パイプラインでの活用
ファイルへの出力
$message = "これはテストメッセージです"
Write-Output $message | Out-File "output.txt"
他のコマンドとの連携
$numbers = 1, 2, 3, 4, 5
Write-Output $numbers | ForEach-Object { $_ * 2 }
実行結果:
2
4
6
8
10
フィルタリング
$fruits = "りんご", "ばなな", "みかん", "ぶどう"
Write-Output $fruits | Where-Object { $_.Length -gt 3 }
実行結果:
ばなな
ぶどう
実際の業務での使用例
ログファイルの作成
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "[$timestamp] 処理が開始されました"
Write-Output $logMessage | Add-Content "application.log"
CSVファイルの作成
$data = [PSCustomObject]@{
Name = "田中太郎"
Age = 30
Department = "開発部"
}
Write-Output $data | Export-Csv "employee.csv" -NoTypeInformation
変数の中身をより詳しく見たいとき

Get-Member でオブジェクトの詳細情報を確認
変数の型を調べる
$date = Get-Date
$date | Get-Member
実行結果の例:
TypeName: System.DateTime
Name MemberType Definition
---- ---------- ----------
Add Method datetime Add(timespan value)
AddDays Method datetime AddDays(double value)
AddHours Method datetime AddHours(double value)
...
利用可能なプロパティとメソッドの確認
$string = "Hello"
$string | Get-Member -MemberType Property
Format-List で詳細に表示
オブジェクトのすべてのプロパティを表示
$process = Get-Process | Select-Object -First 1
$process | Format-List *
実行結果の例:
Name : ApplicationFrameHost
Id : 1234
CPU :
HandleCount : 456
WorkingSet : 12345678
VirtualMemorySize : 87654321
...
特定のプロパティのみ表示
$file = Get-ChildItem "C:\Windows\System32\notepad.exe"
$file | Format-List Name, Length, CreationTime
Format-Table で表形式表示
基本的な使い方
$processes = Get-Process | Select-Object -First 5
$processes | Format-Table Name, Id, CPU
実行結果の例:
Name Id CPU
---- -- ---
ApplicationFrameHost 1234 1.23
audiodg 5678 0.45
dwm 9012 2.67
...
列幅の自動調整
$services = Get-Service | Select-Object -First 3
$services | Format-Table -AutoSize
ConvertTo-Json で JSON形式表示
オブジェクトをJSON形式で表示
$user = [PSCustomObject]@{
Name = "田中太郎"
Age = 30
Email = "tanaka@example.com"
Skills = @("PowerShell", "Python", "JavaScript")
}
$user | ConvertTo-Json
実行結果:
{
"Name": "田中太郎",
"Age": 30,
"Email": "tanaka@example.com",
"Skills": [
"PowerShell",
"Python",
"JavaScript"
]
}
深い階層まで表示
$complexObject | ConvertTo-Json -Depth 5
応用テクニック:デバッグと効率的な表示

変数の存在確認
変数が定義されているかチェック
if (Get-Variable -Name "myVariable" -ErrorAction SilentlyContinue) {
Write-Host "変数 myVariable は定義されています"
$myVariable
} else {
Write-Host "変数 myVariable は定義されていません"
}
より簡単な方法
if ($null -ne $myVariable) {
Write-Host "変数に値が入っています:$myVariable"
} else {
Write-Host "変数は空またはnullです"
}
スクリプト内でのデバッグ表示
条件付きデバッグ表示
$DebugMode = $true
function Debug-Output {
param($Message)
if ($DebugMode) {
Write-Host "[DEBUG] $Message" -ForegroundColor Cyan
}
}
$userName = "田中"
Debug-Output "ユーザー名を設定しました:$userName"
変数ダンプ関数
function Dump-Variables {
param($Scope = "Local")
Write-Host "=== 変数一覧 ($Scope) ===" -ForegroundColor Yellow
Get-Variable -Scope $Scope | ForEach-Object {
Write-Host "$($_.Name) = $($_.Value)" -ForegroundColor White
}
Write-Host "========================" -ForegroundColor Yellow
}
# 使用例
$name = "太郎"
$age = 25
Dump-Variables
複雑なデータ構造の表示
ハッシュテーブルの表示
$config = @{
Server = "localhost"
Port = 8080
Database = "mydb"
Credentials = @{
Username = "admin"
Password = "secret"
}
}
# そのまま表示
$config
# 見やすく表示
$config | Format-List
# JSON形式で表示
$config | ConvertTo-Json -Depth 3
配列の表示
$fruits = @("りんご", "ばなな", "みかん")
# 配列全体を表示
$fruits
# インデックス付きで表示
for ($i = 0; $i -lt $fruits.Count; $i++) {
Write-Host "[$i] $($fruits[$i])"
}
# ForEach-Objectを使用
$fruits | ForEach-Object { Write-Host "- $_" }
実際の業務でよく使うパターン
ファイル処理での変数表示
ファイル情報の表示
$filePath = "C:\temp\data.txt"
if (Test-Path $filePath) {
$file = Get-Item $filePath
Write-Host "ファイル名:$($file.Name)"
Write-Host "サイズ:$($file.Length) バイト"
Write-Host "更新日時:$($file.LastWriteTime)"
} else {
Write-Host "ファイルが見つかりません:$filePath" -ForegroundColor Red
}
ディレクトリ内のファイル一覧
$directory = "C:\temp"
$files = Get-ChildItem $directory
Write-Host "ディレクトリ:$directory"
Write-Host "ファイル数:$($files.Count)"
Write-Host ""
$files | Format-Table Name, Length, LastWriteTime -AutoSize
ネットワーク処理での変数表示
IPアドレス情報の表示
$computerName = $env:COMPUTERNAME
$ipAddress = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.PrefixOrigin -eq "Dhcp" }).IPAddress
Write-Host "コンピュータ名:$computerName"
Write-Host "IPアドレス:$ipAddress"
システム情報の表示
メモリ使用量の表示
$memory = Get-WmiObject -Class Win32_OperatingSystem
$totalMemory = [math]::Round($memory.TotalVisibleMemorySize / 1MB, 2)
$freeMemory = [math]::Round($memory.FreePhysicalMemory / 1MB, 2)
$usedMemory = $totalMemory - $freeMemory
Write-Host "メモリ情報" -ForegroundColor Green
Write-Host "総メモリ:${totalMemory} GB"
Write-Host "使用中:${usedMemory} GB"
Write-Host "空き:${freeMemory} GB"
トラブルシューティング
よくあるエラーと対処法
エラー1:変数が定義されていない
エラーメッセージ:
The variable '$undefinedVar' cannot be retrieved because it has not been set.
対処法:
# 変数の存在確認
if (Get-Variable -Name "undefinedVar" -ErrorAction SilentlyContinue) {
$undefinedVar
} else {
Write-Host "変数 undefinedVar は定義されていません"
}
エラー2:null値の表示
問題:
$nullValue = $null
Write-Host "値:$nullValue" # 何も表示されない
対処法:
$nullValue = $null
if ($null -eq $nullValue) {
Write-Host "値:(null)" -ForegroundColor Yellow
} else {
Write-Host "値:$nullValue"
}
エラー3:配列が期待通りに表示されない
問題:
$array = @(1, 2, 3)
Write-Host "配列:$array" # "配列:1 2 3" と表示される
対処法:
$array = @(1, 2, 3)
Write-Host "配列:[$($array -join ', ')]" # "配列:[1, 2, 3]"
パフォーマンス考慮
大量データの表示
# 大量のプロセスを取得
$processes = Get-Process
# すべて表示(重い)
# $processes | Format-Table
# 最初の10件だけ表示(軽い)
$processes | Select-Object -First 10 | Format-Table Name, Id, CPU
# 特定の条件で絞り込み
$processes | Where-Object { $_.WorkingSet -gt 100MB } | Format-Table
まとめ
基本的な表示方法の総まとめ
方法 | 用途 | 特徴 |
---|---|---|
変数名だけ | 簡単な確認 | 最もシンプル |
Write-Host | メッセージ表示 | 色付け可能、パイプ不可 |
Write-Output | データ連携 | パイプライン対応 |
Format-List | 詳細表示 | オブジェクトの全プロパティ |
Format-Table | 一覧表示 | 複数データの比較 |
ConvertTo-Json | 構造化表示 | 階層データの可視化 |
使い分けの指針
シンプルな確認
$name = "太郎"
$name # 値だけ知りたい場合
ユーザーへのメッセージ
Write-Host "処理が完了しました:$status" -ForegroundColor Green
他のコマンドとの連携
Write-Output $data | Export-Csv "output.csv"
デバッグ・詳細確認
$object | Format-List *
$object | Get-Member
実践的なヒント
- デバッグ時は色分け:エラーは赤、成功は緑で表示
- 大量データは絞り込み:Select-Objectで件数制限
- 複雑なオブジェクトはJSON:構造が見やすい
- 本番環境では Write-Output:ログ出力に適している
コメント