「PowerShellで結果を表示したとき、なんだかよく分からない文字が出てきた…」
そんな経験はありませんか?
PowerShellを使っていると、こんな場面でよく困りますよね:
- 変数の中身をちゃんと確認したい
- オブジェクトを文字として扱いたい
- ログファイルに保存する前に、きれいに整形したい
- 画面に表示される結果をもっと分かりやすくしたい
そんな時に活躍するのが、.ToString()
メソッドという便利な機能です。
「メソッドって何?」と思うかもしれませんが、簡単に言うと「オブジェクトに対してできる操作」のこと。
このToString()
は、PowerShellのオブジェクトを「文字列」に変換してくれる魔法のような機能なんです。
この記事では、PowerShell初心者の方でも迷わず使えるよう、ToString()
の基本から応用まで、分かりやすく解説していきます!
ToString()って何?なぜ必要なの?

ToString()
は、どんなオブジェクトでも文字列に変換してくれる.NET標準のメソッドです。
「.NET」というのは、Microsoftが開発したプログラミングプラットフォームのこと。
PowerShellは、この.NETをベースに作られているので、.NETの便利な機能をたくさん使えるんです。
でも、最終的には:
- 画面に表示する
- ファイルに保存する
- 他のシステムに送信する
こういった場面では「文字列」の形にする必要があります。そこで活躍するのがToString()
なんです。
このセクションのまとめ:ToString()
は「オブジェクトを文字列に変換する基本機能」。
PowerShellでデータを扱う時の必須スキル!
では、実際にどう使うのか見てみましょう。
基本的な使い方をマスターしよう

ToString()
の使い方は、とってもシンプルです。基本的なパターンから見ていきましょう。
基本の書き方
(Get-Date).ToString()
各部分の説明:
Get-Date
:現在の日時を取得するコマンド()
:コマンドの結果をひとまとまりにする.ToString()
:そのオブジェクトを文字列に変換
実行結果の例:
2025/05/23 14:35:00
なぜ括弧が必要? PowerShellでは、コマンドの結果に対してメソッドを実行する時、括弧で囲む必要があります。これによって「まずGet-Dateを実行して、その結果にToString()を適用する」という順序が明確になります。
変数に格納してから使う方法
$now = Get-Date
$now.ToString()
こちらの方が分かりやすいという人も多いです。特に、同じオブジェクトを何度も使う場合は、この方法がおすすめ。
数値での例
$number = 12345
$number.ToString()
実行結果:
12345
数値の場合は、見た目はあまり変わりませんが、内部的には「数値オブジェクト」から「文字列オブジェクト」に変換されています。
このセクションのまとめ:
基本は「オブジェクト.ToString()」の形。括弧を使うか変数に入れるかは、読みやすさで選んでOK!
次は、どんな場面でToString()
が役立つのか、具体例を見てみましょう。
こんな時にToString()が便利!実用例を紹介

ToString()
は、日常的なPowerShell作業で大活躍します。実際の使用例を見てみましょう。
ログファイルに文字列として保存したい時
$now = Get-Date
"現在時刻は $($now.ToString()) です" | Out-File log.txt
$()
って何? これは「サブ式演算子」と呼ばれるもので、文字列の中でコマンドやメソッドを実行したい時に使います。
もう少し詳しく:
# ダメな例(うまく表示されない)
"現在時刻は $now.ToString() です"
# 良い例(きちんと表示される)
"現在時刻は $($now.ToString()) です"
複雑なオブジェクトの概要を一行で確認したい時
$process = Get-Process | Select-Object -First 1
$process.ToString()
ただし注意! プロセスオブジェクトのような複雑なオブジェクトは、ToString()
を使っても「System.Diagnostics.Process」のような型名しか表示されないことがあります。
より詳しい情報が欲しい場合は:
$process | Format-List
# または
$process | ConvertTo-Json
配列の内容を文字列で確認したい時
$fruits = @("りんご", "みかん", "バナナ")
$fruits.ToString()
結果:
System.Object[]
配列の場合は、こちらの方が便利:
$fruits -join ", "
結果:
りんご, みかん, バナナ
CSVファイル作成の前処理として
$data = Get-Process | Select-Object Name, CPU
$data | ForEach-Object {
"$($_.Name.ToString()),$($_.CPU.ToString())"
} | Out-File processes.csv
このセクションのまとめ:ToString()
は文字列での出力・保存・表示に便利。ただし、オブジェクトの種類によって結果が変わることを覚えておこう!
オブジェクトの種類によって結果が変わるって、具体的にどういうこと?詳しく見てみましょう。
オブジェクトの種類によって結果が変わる

ToString()
の結果は、元のオブジェクトの種類によって大きく変わります。
これを理解しておくと、期待通りの結果が得られるようになります。
主要なオブジェクト別のToString()結果
オブジェクトの種類 | ToString() の出力例 | 説明 |
---|---|---|
DateTime(日時) | 2025/05/23 15:00:00 | 日時が読みやすい形で表示される |
Int32(整数) | 123 | 数値がそのまま文字として表示 |
Boolean(真偽値) | True / False | TrueまたはFalseの文字列 |
String(文字列) | Hello World | そのまま(すでに文字列なので) |
PSCustomObject | @{Name=Taro; Age=25} | PowerShell独特の表示形式 |
Hashtable | System.Collections.Hashtable | 型名のみ(中身は表示されない) |
Array(配列) | System.Object[] | 型名のみ(要素は表示されない) |
実際に試してみよう
日時オブジェクト:
(Get-Date).ToString()
# 結果例: 2025/05/23 15:30:00
数値オブジェクト:
$number = 42
$number.ToString()
# 結果: 42
ハッシュテーブル(期待通りにならない例):
$hash = @{Name="田中"; Age=30}
$hash.ToString()
# 結果: System.Collections.Hashtable
ハッシュテーブルの中身を見たい場合は:
$hash | ConvertTo-Json
# または
$hash | Format-Table
複雑なオブジェクトの場合の対処法
プロセス情報を文字列にしたい場合:
# ダメな例
$process = Get-Process | Select-Object -First 1
$process.ToString() # System.Diagnostics.Process
# 良い例
$process = Get-Process | Select-Object -First 1
"プロセス名: $($process.Name), CPU時間: $($process.CPU)"
カスタムオブジェクトを扱う場合:
$person = [PSCustomObject]@{
Name = "田中太郎"
Age = 25
}
# ToString()の結果
$person.ToString() # @{Name=田中太郎; Age=25}
# より詳しく表示したい場合
$person | Format-List
# または
"名前: $($person.Name), 年齢: $($person.Age)"
このセクションのまとめ:ToString()
の結果はオブジェクトの種類次第。
期待した結果が得られない時は、他の方法と組み合わせよう!
日時オブジェクトは特別な書式設定ができるって聞いたけど、どうやるの?
日時の書式をカスタマイズしてみよう

DateTime
オブジェクト(日時)は、ToString()
で書式を自由に指定できる特別なオブジェクトです。
これができると、ログファイルやレポート作成がぐっと楽になります。
基本的な書式指定
$now = Get-Date
$now.ToString("yyyy-MM-dd HH:mm:ss")
結果例:
2025-05-23 15:30:00
書式文字の意味:
yyyy
:4桁の年(2025)MM
:2桁の月(05)dd
:2桁の日(23)HH
:24時間形式の時(15)mm
:分(30)ss
:秒(00)
よく使う書式パターン
$now = Get-Date
# 日本でよく使われる形式
$now.ToString("yyyy年MM月dd日")
# 結果: 2025年05月23日
# ファイル名に使いやすい形式(特殊文字なし)
$now.ToString("yyyyMMdd_HHmmss")
# 結果: 20250523_153000
# ログ用の詳細形式
$now.ToString("yyyy-MM-dd HH:mm:ss.fff")
# 結果: 2025-05-23 15:30:00.123
# 英語圏でよく使われる形式
$now.ToString("MM/dd/yyyy hh:mm tt")
# 結果: 05/23/2025 03:30 PM
tt
って何? AM/PMを表示する記号です。12時間表示の時に使います。
実用的な使用例
ログファイルに日時を含める:
$timestamp = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
"[$timestamp] システムが開始されました" | Out-File system.log -Append
ファイル名に日時を含める:
$dateString = (Get-Date).ToString("yyyyMMdd")
$filename = "backup_$dateString.txt"
Get-Process | Out-File $filename
週報や月報の作成:
$weekStart = (Get-Date).ToString("yyyy年MM月dd日")
$reportTitle = "$weekStart 週の作業報告"
他の言語での日時表示
PowerShellでは、地域設定に応じた日時表示も可能です:
# 現在の地域設定での表示
(Get-Date).ToString("D") # 長い日付形式
# アメリカ形式
(Get-Date).ToString("d", [System.Globalization.CultureInfo]"en-US")
# 日本形式
(Get-Date).ToString("d", [System.Globalization.CultureInfo]"ja-JP")
このセクションのまとめ:日時の書式指定はとても便利!
よく使うパターンを覚えておくと、ログやファイル名の作成が楽になる。
他にも文字列に変換する方法があるって本当?
ToString()以外の文字列変換方法も知っておこう

ToString()
以外にも、PowerShellには文字列に変換する便利な方法がいくつかあります。
場面に応じて使い分けることで、より効率的に作業できます。
Out-String:複数行を文字列にまとめる
# 複数のプロセス情報を一つの文字列にする
$processString = Get-Process | Select-Object -First 3 | Out-String
$processString
Out-String
の特徴:
- 複数のオブジェクトを改行付きで一つの文字列にまとめる
- テーブル形式での表示も保持される
- ログファイルへの出力に便利
-join 演算子:配列を文字列に結合
# 配列の要素をカンマ区切りで結合
$fruits = @("りんご", "みかん", "バナナ")
$fruitString = $fruits -join ", "
$fruitString
# 結果: りんご, みかん, バナナ
# パス区切り文字で結合
$pathParts = @("C:", "Users", "Public", "Documents")
$fullPath = $pathParts -join "\"
$fullPath
# 結果: C:\Users\Public\Documents
ConvertTo-Json:JSON形式の文字列に変換
# オブジェクトをJSON文字列に変換
$person = @{
Name = "田中太郎"
Age = 30
Department = "IT"
}
$jsonString = $person | ConvertTo-Json
$jsonString
結果:
{
"Name": "田中太郎",
"Age": 30,
"Department": "IT"
}
ConvertTo-Csv:CSV形式の文字列に変換
# プロセス情報をCSV文字列に変換
$csvString = Get-Process | Select-Object Name, CPU -First 3 | ConvertTo-Csv
$csvString
使い分けのコツ
変換方法 | 適している場面 | 出力形式 |
---|---|---|
ToString() | 単一オブジェクトを簡単に文字列化 | オブジェクト依存 |
Out-String | 複数オブジェクトをテーブル形式で文字列化 | 人間が読みやすい形式 |
-join | 配列を区切り文字付きで一行にまとめる | カスタム区切り文字 |
ConvertTo-Json | 構造化データをAPIや設定ファイルで使う | JSON形式 |
ConvertTo-Csv | データをExcelで開いたり、他システムと連携 | CSV形式 |
実用的な組み合わせ例
ログファイル用の詳細情報:
$timestamp = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
$processInfo = Get-Process | Select-Object Name, CPU -First 5 | Out-String
$logMessage = "[$timestamp] プロセス情報:`n$processInfo"
$logMessage | Out-File processes.log
設定ファイルの生成:
$config = @{
ServerName = "WebServer01"
Port = 8080
LastUpdate = (Get-Date).ToString("yyyy-MM-dd")
}
$config | ConvertTo-Json | Out-File config.json
このセクションのまとめ:ToString()
以外にも便利な文字列変換方法がある。目的に応じて使い分けることで、より効率的にデータを扱える!
まとめ
PowerShellのToString()
について、基本から応用まで学んできましたね。
PowerShellは「オブジェクト指向」でデータを扱いますが、最終的には「文字列」として出力・記録・表示することがとても多いです。
ToString()
をうまく使えば、デバッグ作業やログ管理、データの整形が格段に楽になります。
今日覚えたポイントをおさらい:
- 基本的な使い方:
オブジェクト.ToString()
で文字列に変換 - オブジェクト依存:結果はオブジェクトの種類によって大きく変わる
- 日時の書式指定:
ToString("yyyy-MM-dd")
で自由な形式にカスタマイズ - 他の変換方法:
Out-String
、-join
、ConvertTo-Json
なども場面に応じて活用 - 実用性:ログ出力、ファイル保存、データ整形で大活躍
今すぐ試してみよう!
- 現在時刻を好きな形式で表示してみる
- よく使うコマンドの結果を
ToString()
で文字列化してみる - ログファイルに日時付きでメッセージを保存してみる
困った時の対処法:
- 期待した結果が出ない → オブジェクトの種類を
Get-Member
で確認 - 複雑なオブジェクト →
ConvertTo-Json
やFormat-List
を試す - 配列の内容 →
-join
演算子を使う
コメント