PowerShellを使い始めたばかりの方は、「関数って何?」「どうやって作るの?」「今どんな関数が使えるの?」と疑問に思うかもしれません。
関数とは、簡単に言うと「よく使う処理をひとまとめにして、簡単に呼び出せるようにしたもの」です。
料理で例えるなら、「カレーの作り方」をレシピとして書いておいて、いつでも同じ手順でカレーを作れるようにするイメージです。
この記事では、PowerShellの関数について、「プログラミングは初めて」という方でもわかるように、基本から応用まで丁寧に説明します。
実際に動かせるコードもたくさん載せているので、一緒に試しながら覚えていきましょう!
PowerShellの関数って何?

関数をわかりやすく説明すると
関数とは、「決まった処理をまとめて名前をつけたもの」です。
一度作っておけば、その名前を呼ぶだけで同じ処理を何度でも実行できます。
身近な例で考えてみましょう:
- 電子レンジの「温めボタン」→ 複雑な温度調整を1つのボタンで実行
- スマホの「写真アプリ」→ 撮影から保存までの処理をアプリ名で呼び出し
- 関数→ 複雑な処理を簡単な名前で呼び出し
関数を使うメリット
1. 同じコードを何度も書かなくて済む 毎回長いコードを書く代わりに、関数名を呼ぶだけで処理を実行できます。
2. コードが読みやすくなる 複雑な処理に分かりやすい名前をつけることで、何をしているかが一目でわかります。
3. 間違いが減る 一度正しく動く関数を作れば、同じ処理で毎回同じ結果が得られます。
4. 修正が楽になる 処理を変更したいときは、関数の中身だけを修正すれば、その関数を使っている全ての場所に反映されます。
PowerShellでの関数の基本構文
function 関数名 {
# ここに実行したい処理を書く
}
コードの説明:
function
:「これから関数を作りますよ」という合図関数名
:あなたが決める関数の名前{ }
:この中に実際の処理を書く
実際に関数を作ってみよう
function Say-Hello {
Write-Output "こんにちは、PowerShell!"
}
# 関数を呼び出してみる
Say-Hello
実行結果:
こんにちは、PowerShell!
コードの解説:
Say-Hello
という名前の関数を作成- 関数の中身は「こんにちは、PowerShell!」と表示する処理
Say-Hello
と入力すると関数が実行される
この簡単な例でも、関数の基本的な仕組みがわかりますね。
現在使える関数の一覧を確認する方法
なぜ関数の一覧を確認するの?
PowerShellには最初から便利な関数がたくさん用意されています。
また、自分で作った関数もセッション中は使い続けることができます。どんな関数が使えるかを知ることで、作業効率がぐっと上がります。
方法1:Function:ドライブを使う
Get-ChildItem Function:
実行すると: 現在のセッションで利用できる全ての関数が一覧で表示されます。
表示例:
Name CommandType
---- -----------
A: Function
B: Function
C: Function
Clear-Host Function
...(たくさんの関数が表示される)
方法2:Get-Commandを使う
Get-Command -CommandType Function
こちらも同じように関数の一覧が表示されますが、より詳細な情報を含んでいます。
自分で作った関数だけを確認する
多くの関数が表示されて見つけにくい場合は、名前で絞り込むことができます:
# 「Say」で始まる関数だけを表示
Get-ChildItem Function: | Where-Object { $_.Name -like "Say*" }
# 自分で作った関数の名前を覚えている場合
Get-Command Say-Hello
関数の詳細情報を確認する
特定の関数について詳しく知りたい場合:
Get-Command Say-Hello | Format-List *
表示される情報:
- 関数の定義
- パラメーター情報
- 作成された場所
- その他の詳細
関数の一覧を確認できるようになったら、次はもっと実用的な関数の作り方を学んでみましょう。
パラメーター付き関数を作ってみよう

パラメーターって何?
パラメーターとは、関数に渡す「材料」のようなものです。同じ関数でも、渡す材料によって結果が変わります。
身近な例:
- 計算機の「足し算機能」→ 数字(パラメーター)を渡すと計算結果が返ってくる
- 翻訳アプリ→ 日本語(パラメーター)を渡すと英語が返ってくる
基本的なパラメーター付き関数
function Greet {
param($Name)
Write-Output "こんにちは、$Name さん!"
}
# 使い方
Greet -Name "太郎"
Greet -Name "花子"
実行結果:
こんにちは、太郎 さん!
こんにちは、花子 さん!
コードの解説:
param($Name)
:「$Name というパラメーターを受け取ります」という意味$Name
:パラメーターとして渡された値が入る箱-Name "太郎"
:Name というパラメーターに「太郎」を渡す
複数のパラメーターを使う関数
function Calculate-Sum {
param($Number1, $Number2)
$result = $Number1 + $Number2
Write-Output "$Number1 + $Number2 = $result"
}
# 使い方
Calculate-Sum -Number1 5 -Number2 3
Calculate-Sum -Number1 10 -Number2 7
実行結果:
5 + 3 = 8
10 + 7 = 17
デフォルト値を設定した関数
パラメーターに何も渡されなかった場合の初期値を設定できます:
function Greet-WithDefault {
param($Name = "ゲスト")
Write-Output "こんにちは、$Name さん!"
}
# パラメーターありで実行
Greet-WithDefault -Name "田中"
# パラメーターなしで実行(デフォルト値が使われる)
Greet-WithDefault
実行結果:
こんにちは、田中 さん!
こんにちは、ゲスト さん!
実用的な関数の例
function Show-FileInfo {
param($FilePath)
if (Test-Path $FilePath) {
$file = Get-Item $FilePath
Write-Output "ファイル名: $($file.Name)"
Write-Output "サイズ: $($file.Length) バイト"
Write-Output "作成日: $($file.CreationTime)"
Write-Output "最終更新: $($file.LastWriteTime)"
} else {
Write-Output "ファイルが見つかりません: $FilePath"
}
}
# 使い方(実際のファイルパスを指定してください)
Show-FileInfo -FilePath "C:\Windows\notepad.exe"
パラメーターを使えるようになると、関数の可能性が大きく広がります。次は、さらに高度な機能を見ていきましょう。
高度な関数機能を使ってみよう
パイプライン処理対応の関数
PowerShellの特徴の一つは「パイプライン」です。前のコマンドの結果を次のコマンドに渡すことができます。関数もパイプラインに対応させることができます。
function Show-Items {
process {
Write-Output "アイテム: $_"
}
}
# 使い方
"りんご", "バナナ", "みかん" | Show-Items
実行結果:
アイテム: りんご
アイテム: バナナ
アイテム: みかん
コードの解説:
process { }
:パイプラインで渡されたデータを1つずつ処理する$_
:現在処理中のデータを表す特別な変数
より実用的なパイプライン関数
function Add-Prefix {
param($Prefix = "【重要】")
process {
Write-Output "$Prefix $_"
}
}
# 使い方
"会議のお知らせ", "システムメンテナンス", "締切のご連絡" | Add-Prefix
"新商品リリース", "価格改定" | Add-Prefix -Prefix "【お知らせ】"
実行結果:
【重要】 会議のお知らせ
【重要】 システムメンテナンス
【重要】 締切のご連絡
【お知らせ】 新商品リリース
【お知らせ】 価格改定
エラー処理を含む関数
実際の業務では、エラーが起きることを想定した関数を作ることが大切です:
function Divide-Numbers {
param($Number1, $Number2)
try {
if ($Number2 -eq 0) {
throw "0で割ることはできません"
}
$result = $Number1 / $Number2
Write-Output "$Number1 ÷ $Number2 = $result"
}
catch {
Write-Error "エラーが発生しました: $_"
}
}
# 正常なケース
Divide-Numbers -Number1 10 -Number2 2
# エラーケース
Divide-Numbers -Number1 10 -Number2 0
実行結果:
10 ÷ 2 = 5
エラーが発生しました: 0で割ることはできません
ファイル処理を行う実用的な関数
function Backup-Files {
param(
$SourcePath,
$BackupPath = "C:\Backup"
)
try {
# バックアップ先フォルダが存在しない場合は作成
if (-not (Test-Path $BackupPath)) {
New-Item -ItemType Directory -Path $BackupPath -Force
Write-Output "バックアップフォルダを作成しました: $BackupPath"
}
# ファイルをコピー
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$fileName = (Get-Item $SourcePath).Name
$backupFileName = "${timestamp}_$fileName"
$backupFullPath = Join-Path $BackupPath $backupFileName
Copy-Item $SourcePath $backupFullPath
Write-Output "バックアップ完了: $backupFullPath"
}
catch {
Write-Error "バックアップに失敗しました: $_"
}
}
# 使い方
Backup-Files -SourcePath "C:\重要なファイル.txt"
begin、process、endブロックを使った高度な関数
大量のデータを効率的に処理する場合に使います:
function Count-Items {
begin {
$count = 0
Write-Output "処理を開始します..."
}
process {
$count++
Write-Output "処理中: $_ (累計: $count 件)"
}
end {
Write-Output "処理完了。合計 $count 件のアイテムを処理しました。"
}
}
# 使い方
1..5 | Count-Items
実行結果:
処理を開始します...
処理中: 1 (累計: 1 件)
処理中: 2 (累計: 2 件)
処理中: 3 (累計: 3 件)
処理中: 4 (累計: 4 件)
処理中: 5 (累計: 5 件)
処理完了。合計 5 件のアイテムを処理しました。
これらの高度な機能を使えるようになると、PowerShellでより複雑で実用的な処理を自動化できるようになります。
実際の業務で使える関数例

システム情報を表示する関数
function Show-SystemInfo {
Write-Output "=== システム情報 ==="
Write-Output "コンピューター名: $env:COMPUTERNAME"
Write-Output "ユーザー名: $env:USERNAME"
Write-Output "OS: $((Get-WmiObject Win32_OperatingSystem).Caption)"
Write-Output "PowerShellバージョン: $($PSVersionTable.PSVersion)"
$memory = Get-WmiObject Win32_PhysicalMemory | Measure-Object Capacity -Sum
$memoryGB = [math]::Round($memory.Sum / 1GB, 2)
Write-Output "メモリ: ${memoryGB}GB"
$disk = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 }
foreach ($drive in $disk) {
$freeSpaceGB = [math]::Round($drive.FreeSpace / 1GB, 2)
$totalSpaceGB = [math]::Round($drive.Size / 1GB, 2)
Write-Output "ドライブ$($drive.DeviceID) ${freeSpaceGB}GB / ${totalSpaceGB}GB 利用可能"
}
Write-Output "===================="
}
Show-SystemInfo
ログファイルを分析する関数
function Analyze-LogFile {
param($LogPath)
if (-not (Test-Path $LogPath)) {
Write-Error "ログファイルが見つかりません: $LogPath"
return
}
$content = Get-Content $LogPath
$totalLines = $content.Count
$errorLines = $content | Where-Object { $_ -match "ERROR" }
$warningLines = $content | Where-Object { $_ -match "WARNING" }
Write-Output "=== ログ分析結果 ==="
Write-Output "ファイル: $LogPath"
Write-Output "総行数: $totalLines"
Write-Output "エラー: $($errorLines.Count) 件"
Write-Output "警告: $($warningLines.Count) 件"
if ($errorLines.Count -gt 0) {
Write-Output ""
Write-Output "最新のエラー(最大5件):"
$errorLines | Select-Object -Last 5 | ForEach-Object {
Write-Output " $_"
}
}
Write-Output "==================="
}
# 使い方
# Analyze-LogFile -LogPath "C:\Logs\application.log"
ファイル整理を行う関数
function Organize-FilesByDate {
param(
$SourcePath,
$DestinationPath
)
if (-not (Test-Path $SourcePath)) {
Write-Error "ソースパスが見つかりません: $SourcePath"
return
}
$files = Get-ChildItem $SourcePath -File
foreach ($file in $files) {
$year = $file.CreationTime.Year
$month = $file.CreationTime.ToString("MM")
$yearMonthPath = Join-Path $DestinationPath "$year\$month"
if (-not (Test-Path $yearMonthPath)) {
New-Item -ItemType Directory -Path $yearMonthPath -Force | Out-Null
Write-Output "フォルダを作成: $yearMonthPath"
}
$destinationFile = Join-Path $yearMonthPath $file.Name
Move-Item $file.FullName $destinationFile
Write-Output "移動: $($file.Name) → $yearMonthPath"
}
Write-Output "ファイル整理が完了しました。"
}
# 使い方
# Organize-FilesByDate -SourcePath "C:\Downloads" -DestinationPath "C:\OrganizedFiles"
ネットワーク接続をテストする関数
function Test-NetworkConnections {
param(
$Servers = @("google.com", "microsoft.com", "github.com")
)
Write-Output "=== ネットワーク接続テスト ==="
foreach ($server in $Servers) {
try {
$result = Test-Connection $server -Count 1 -Quiet
if ($result) {
Write-Output "✓ $server : 接続OK"
} else {
Write-Output "✗ $server : 接続NG"
}
}
catch {
Write-Output "✗ $server : エラー"
}
}
Write-Output "=========================="
}
Test-NetworkConnections
これらの関数は、実際の業務でよく行う作業を自動化したものです。自分の業務に合わせてカスタマイズして使ってみてください。
まとめ
PowerShellの関数について、基本から応用まで詳しく解説しました。
この記事で学んだこと:
関数の基本:
- 関数は「決まった処理をまとめて名前をつけたもの」
function 関数名 { 処理 }
の形で作成- 再利用性とコードの読みやすさが向上
関数の一覧確認:
Get-ChildItem Function:
で全関数を表示Get-Command -CommandType Function
でより詳細な情報- 絞り込み検索で必要な関数を素早く発見
パラメーター機能:
param()
でパラメーターを定義- デフォルト値の設定が可能
- 複数のパラメーターを組み合わせて使用
高度な機能:
- パイプライン処理(
process
ブロック) - エラー処理(
try-catch
文) begin
、process
、end
ブロックによる効率的な処理
実用的な活用例:
- システム情報の表示
- ログファイルの分析
- ファイルの整理と管理
- ネットワーク接続のテスト
覚えておきたいコマンド:
# 関数の一覧表示
Get-ChildItem Function:
# 特定の関数の詳細確認
Get-Command 関数名 | Format-List *
# 関数の作成(基本形)
function 関数名 {
param($パラメーター名)
# 処理内容
}
コメント