本ブログでは、PowerShellの便利な使い方についての記事を多く投稿してきました。
いまさらながら、PowerShellとは何かをまとめてみます。
PowerShellとは?
Windows PowerShellは、Microsoftが提供するタスク自動化フレームワークで、コマンドラインシェルとスクリプト言語が統合されたツールです。
システム管理者や開発者が、Windowsを含むさまざまなシステム上でタスクを自動化したり管理したりするために使用されます。
PowerShellは、他のシェル(例:CMDやBash)と異なり、.NETフレームワークをベースにしており、コマンドの結果としてオブジェクトを返すという特長があります。
このオブジェクト指向の性質により、より強力で柔軟なスクリプトを書くことが可能です。
PowerShellの基本コマンド(Cmdlets)
PowerShellのコマンドは、Cmdlets(コマンドレット)と呼ばれ、Get-Help
やGet-Process
のように、動詞-名詞の形式で記述されます。
以下は基本的なCmdletsの例です。
Get-Help
PowerShellのヘルプシステムを利用するためのコマンドです。
特定のCmdletの使い方や例を調べることができます。
Get-Help Get-Process
Get-Command
利用可能なCmdletsの一覧を取得するコマンドです。
Get-Command
Get-Process
現在実行中のプロセスを取得するCmdletです。
Get-Process
オブジェクト指向のデータ処理
PowerShellの強力な特徴の一つは、Cmdletsがオブジェクトを返す点です。
たとえば、Get-Process
を実行すると、プロセスに関するデータがテキストではなく、プロセスオブジェクトとして返されます。
以下はGet-Process
で返されたオブジェクトから特定のプロパティを取得する例です。
Get-Process | Select-Object Name, Id, CPU
これにより、Cmdletの出力を簡単にフィルタリングしたり、他のCmdletsと組み合わせて処理を行うことができます。
パイプライン処理
PowerShellでは、複数のCmdletsをパイプラインでつなげることで、データの流れを操作できます。
以下は、プロセス一覧を取得し、その中から特定の条件に合うものを表示する例です。
Get-Process | Where-Object { $_.CPU -gt 100 }
この例では、Get-Process
の結果をWhere-Object
に渡し、CPU使用率が100%以上のプロセスのみをフィルタリングしています。
$_
は現在のオブジェクトを表すため、各プロセスのCPU使用率を確認できます。
スクリプト作成と自動化
PowerShellは単なるコマンド実行だけでなく、複雑なタスクを自動化するためのスクリプトを作成することも可能です。
以下は、特定のフォルダ内のファイルをバックアップするシンプルなスクリプトの例です。
$source = "C:\SourceFolder"
$destination = "C:\BackupFolder"
Copy-Item -Path $source\* -Destination $destination -Recurse
このスクリプトでは、Copy-Item
コマンドを使用して、C:\SourceFolder
内の全ファイルをC:\BackupFolder
にバックアップしています。
-Recurse
オプションを使うことで、サブフォルダ内のファイルもすべてコピーされます。
モジュールと拡張性
PowerShellはモジュールを使って機能を拡張することができます。
モジュールとは、追加のCmdlets、関数、変数、エイリアスを含むパッケージです。
以下はモジュールをインストールする方法の例です。
Install-Module -Name Az -AllowClobber
このコマンドは、Azure関連のCmdletsを提供する「Az」モジュールをインストールする例です。
モジュールをインストールすることで、クラウドやオンプレミスの様々なサービスにアクセスできるようになります。
なお、管理者権限で実行する必要があります。
エラーハンドリング
PowerShellでは、エラーハンドリングをスクリプト内で行うことができます。
これにより、エラー発生時にスクリプトが中断せず、適切な処理を行うことができます。
try {
Get-Item "C:\NonExistentFile" -ErrorAction Stop
} catch {
Write-Host "ファイルが見つかりません"
}
この例では、Get-Item
がエラーを返す可能性がある場合に、try
ブロック内で処理を実行し、エラーが発生した場合にはcatch
ブロックで代替処理を行っています。
リモート管理
PowerShellは、リモートシステムを管理するための機能も備えています。
これにより、ネットワーク内の他のWindowsシステムをリモートで操作できるようになります。
リモートセッションを開始するには、Enter-PSSession
コマンドを使用します。
PowerShellとPowerShell Coreの違い
PowerShellには、Windows PowerShellとPowerShell Coreの2つのバージョンがあります。
Windows PowerShell
Windows専用で動作します。バージョン5.1が最後のリリースで、.NET Frameworkを使用します。
PowerShell Core
クロスプラットフォーム対応で、Windows、Linux、macOSで動作します。
PowerShell Coreは.NET Core上に構築されており、より広範な互換性があります。
現在、バージョン7.xが最新です。
まとめ
Windows PowerShellは、単なるコマンドラインシェル以上の機能を提供し、オブジェクト指向のデータ処理、スクリプト作成、リモート管理など、システム管理やタスク自動化を効率化するための多様なツールです。システム管理者や開発者は、これらの機能を活用することで、日常的な作業を大幅に自動化し、効率を向上させることができます。