Categories: powershell

PowerShellの関数(Function)の基本と活用方法|初心者でも理解できるスクリプト構造の組み方

PowerShellは、Windowsの自動化やシステム管理に欠かせない強力なツールです。中でも「関数(Function)」は、繰り返し使う処理をまとめたり、コードを見やすく整理したりする際にとても役立ちます。この記事では、PowerShellの関数の定義方法、引数の扱い方、戻り値の使い方などを実例付きで解説します。初心者の方でも実践しやすいように、丁寧な説明を心がけています。


PowerShell関数とは?

PowerShellの関数(Function)は、一連のコマンドや処理を名前付きで定義しておき、後で何度でも呼び出せるようにする仕組みです。

function Greet {
Write-Output "こんにちは、PowerShellの世界へようこそ!"
}

この関数は Greet という名前で定義されており、Greet と入力するだけでメッセージを表示してくれます。

関数を使うことで、次のようなメリットがあります。

  • 処理の再利用が可能になる
  • スクリプトが見やすくなる
  • 保守性が高まる

基本的な関数の定義方法

PowerShellでの関数の基本的な書き方は次のとおりです。

function 関数名 {
スクリプトブロック
}

例えば、文字列を出力するだけの簡単な関数は以下のようになります。

function Show-DateTime {
Get-Date
}

この関数を実行すると、現在の日時が表示されます。

Show-DateTime

引数(パラメーター)の使い方

関数に引数を渡すことで、より柔軟な処理が可能になります。引数は param() を使って定義します。

function GreetUser {
param($Name)
Write-Output "こんにちは、$Name さん!"
}

使用例:

GreetUser -Name "Takeshi"

複数の引数を指定することも可能です。

function Add-Numbers {
param($a, $b)
return $a + $b
}
Add-Numbers -a 3 -b 7 # 結果は 10

戻り値の使い方

関数は return を使って値を返すことができます。返された値は、別の変数に格納して利用することもできます。

function Get-Square {
param($number)
return $number * $number
}
$result = Get-Square -number 5
Write-Output $result # 25

ただし、PowerShellでは明示的に return を使わなくても、最後に評価された値が返されます。


高度な引数の指定(型、必須、デフォルト値)

PowerShellでは、引数に型を指定したり、必須にしたり、デフォルト値を設定することもできます。

型を指定する例:

function Double-Int {
param([int]$num)
return $num * 2
}

必須にする例:

function Greet-Required {
param(
[Parameter(Mandatory=$true)]
[string]$Name
)
Write-Output "こんにちは、$Name さん"
}

デフォルト値を指定する例:

function Greet-Default {
param([string]$Name = "ゲスト")
Write-Output "こんにちは、$Name さん"
}

スコープと変数の扱い

関数内で定義した変数は、通常は関数の外からは参照できません。これを「スコープ」と呼びます。変数をグローバルにしたい場合は $global: を使います。

function Set-GlobalValue {
$global:MyVar = "これはグローバル変数です"
}

ただし、グローバル変数は予期せぬ副作用を引き起こす可能性があるため、使用には注意が必要です。


実用的な関数のサンプル集

ファイルの存在確認

function Test-FileExists {
param([string]$Path)
if (Test-Path $Path) {
Write-Output "ファイルは存在します"
} else {
Write-Output "ファイルが存在しません"
}
}

複数ファイルのサイズ合計を計算

function Get-TotalSize {
param([string[]]$Files)
$total = 0
foreach ($file in $Files) {
if (Test-Path $file) {
$total += (Get-Item $file).Length
}
}
return $total
}

functionとscriptblockの違い

PowerShellでは、function 以外にも {} で囲んだ ScriptBlock を使ってコードの塊を定義できます。たとえば次のように使います。

$sb = {
param($name)
"Hello, $name"
}
&$sb "Taro" # 結果: Hello, Taro

関数との違いは、より柔軟に扱える点や、コマンドとして保存しておくよりも使い捨て用途に向いている点です。


モジュール化して再利用する方法

複数の関数をまとめて .psm1 ファイルに保存することで、PowerShellモジュールとして扱えます。

例:

  1. MyFunctions.psm1 に関数を記述
  2. Import-Module コマンドで読み込み
Import-Module -Name "C:\Scripts\MyFunctions.psm1"

まとめ

PowerShellの関数を使うことで、スクリプトの可読性と保守性が大きく向上します。基本の書き方から、引数の使い方、戻り値、高度な指定方法、さらにはモジュール化まで、関数はPowerShellスクリプトの中心的な役割を担います。まずは簡単な関数から始めて、徐々に実務的な自動化スクリプトへと応用していきましょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。