Windows PowerShellで変数を表示する方法|初心者でもすぐわかる基本から便利テクまで

Windows

「PowerShellで変数に入れた値をどうやって確認するの?」
「変数の中身を見たいだけなのにやり方がわからない」
「エラーが出るけど、どこで変数が間違っているのかチェックしたい」

そんな疑問を持つ方は多いです。

PowerShellでスクリプトを書いていると、変数に正しい値が入っているかどうか確認したくなることがよくあります。

他のプログラミング言語では複雑な書き方が必要な場合もありますが、PowerShellでは変数に格納したデータを画面に表示する方法がとても簡単です。

この記事では、変数の基本的な表示方法から、少し便利な整形表示、さらには実際の業務で使える応用テクニックまで、初心者の方にもわかるように丁寧に解説します。

スポンサーリンク

PowerShellの変数とは?

変数の基本概念

変数って何?

変数とは、データを一時的に保存しておく箱のようなものです。

日常生活での例え

  • メモ帳:情報を書いて後で見返す
  • 引き出し:物を入れて名前をつけて管理
  • ラベル付きの箱:中身がわかるように名前をつける

PowerShellでも同じように、データに名前をつけて管理できます。

変数の作り方

基本的な書き方

PowerShellでは $ をつけて変数を作ります。

$name = "PowerShell"
$number = 42
$isActive = $true

作成される変数の説明

$name

  • 文字列(String)型
  • 値:"PowerShell"
  • 用途:名前やメッセージの保存

$number

  • 数値(Integer)型
  • 値:42
  • 用途:計算や カウンタとして使用

$isActive

  • 真偽値(Boolean)型
  • 値:$true(または$false
  • 用途:フラグやスイッチとして使用

変数名のルール

使える文字

  • 英字a-zA-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の動作

  1. Read:コマンドを読み取る
  2. Eval:コマンドを評価・実行する
  3. Print:結果を画面に出力する
  4. 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

色の選択肢

  • BlackBlueCyanDarkBlueDarkCyan
  • DarkGrayDarkGreenDarkMagentaDarkRed
  • DarkYellowGrayGreenMagentaRed
  • WhiteYellow

背景色も指定

$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

実践的なヒント

  1. デバッグ時は色分け:エラーは赤、成功は緑で表示
  2. 大量データは絞り込み:Select-Objectで件数制限
  3. 複雑なオブジェクトはJSON:構造が見やすい
  4. 本番環境では Write-Output:ログ出力に適している

コメント

タイトルとURLをコピーしました