PowerShellは、Windows、macOS、Linuxで動作する強力なコマンドラインシェルおよびスクリプト言語です。
システム管理やタスクの自動化において非常に役立ちます。
本記事では、PowerShellの主要なコマンド(コマンドレット)について、その詳細と具体的な使い方を紹介します。
PowerShellの基本から高度な使い方まで網羅し、初心者から上級者まで役立つ情報を提供します。
- PowerShellの基本概念
- PowerShellの基本コマンド
- ファイルとディレクトリの操作
- システム管理コマンド
- ネットワークコマンド
- ユーザー管理コマンド
- セキュリティコマンド
- その他の重要なコマンド
- Get-History
- Invoke-History
- Clear-History
- Get-EventLog
- Write-EventLog
- Send-MailMessage
- Get-Event
- Register-ObjectEvent
- New-Object
- Start-Job
- Get-Job
- Receive-Job
- Stop-Job
- Remove-Job
- ConvertTo-Json
- ConvertFrom-Json
- Measure-Object
- Select-Object
- Sort-Object
- Group-Object
- Where-Object
- ForEach-Object
- Start-Sleep
- Read-Host
- Write-Host
- Write-Output
- Write-Debug
- Write-Verbose
- Write-Warning
- Write-Error
- スクリプト作成と自動化
- まとめ
PowerShellの基本概念
コマンドレットとは
PowerShellのコマンドは「コマンドレット」と呼ばれます。
コマンドレットは、特定のタスクを実行する小さな.NETクラスで、Verb-Noun形式の命名規則に従っています。
たとえば、ファイルを取得するコマンドはGet-Item、プロセスを停止するコマンドはStop-Processです。
パイプライン
PowerShellでは、コマンドの出力を次のコマンドの入力として使用するパイプライン(|)を利用できます。
これにより、複雑なタスクを簡潔に記述できます。
Get-Process | Where-Object {$_.CPU -gt 100}
このコマンドは、現在動作しているプロセスのうち、CPU使用率が100以上のものをフィルタリングして表示します。
各プロセスはオブジェクトとして扱われるため、CPU使用率などのプロパティに簡単にアクセスできます。
PowerShellの基本コマンド
Get-Command
Get-Commandは、PowerShellで利用可能なすべてのコマンドをリストします。
# すべてのコマンドを表示
Get-Command
# 特定のコマンドを検索
Get-Command *-Item
Get-Help
Get-Helpは、コマンドレットの詳細なヘルプ情報を提供します。
# コマンドのヘルプを表示
Get-Help Get-Process
# コマンドの具体例を表示
Get-Help Get-Process -Examples
# ヘルプを最新のものに更新
Update-Help
Get-Alias
Get-Aliasは、エイリアスの一覧を表示します。
エイリアスはコマンドレットの短縮名です。
# すべてのエイリアスを表示
Get-Alias
# 特定のエイリアスのコマンドレットを表示
Get-Alias -Name gci
Set-Alias
Set-Aliasは、新しいエイリアスを作成します。
# 'll'というエイリアスを'Get-ChildItem'に設定
Set-Alias -Name ll -Value Get-ChildItem
ファイルとディレクトリの操作
Get-ChildItem
Get-ChildItemは、ディレクトリの内容をリストします。
Unixシステムのlsコマンドに相当します。
# カレントディレクトリの内容を表示
Get-ChildItem
# 特定のディレクトリの内容を表示
Get-ChildItem -Path C:\Windows
Set-Location
Set-Locationは、カレントディレクトリを変更します。
Unixシステムのcdコマンドに相当します。
# カレントディレクトリを変更
Set-Location -Path C:\Windows
# エイリアスを使用してディレクトリを変更
cd C:\Windows
Copy-Item
Copy-Itemは、ファイルやディレクトリをコピーします。
# ファイルをコピー
Copy-Item -Path C:\source\file.txt -Destination C:\destination\
# ディレクトリを再帰的にコピー
Copy-Item -Path C:\source\ -Destination C:\destination\ -Recurse
Move-Item
Move-Itemは、ファイルやディレクトリを移動します。
# ファイルを移動
Move-Item -Path C:\source\file.txt -Destination C:\destination\
# ディレクトリを移動
Move-Item -Path C:\source\ -Destination C:\destination\
Remove-Item
Remove-Itemは、ファイルやディレクトリを削除します。
# ファイルを削除
Remove-Item -Path C:\file.txt
# ディレクトリを再帰的に削除
Remove-Item -Path C:\directory\ -Recurse
Out-File
Out-Fileは、出力をファイルにリダイレクトします。
# 出力をファイルに書き込む
Get-Process | Out-File -FilePath C:\processes.txt
Export-Csv
Export-Csvは、オブジェクトをCSVファイルにエクスポートします。
# プロセス情報をCSVファイルにエクスポート
Get-Process | Export-Csv -Path C:\processes.csv -NoTypeInformation
Import-Csv
Import-Csvは、CSVファイルをインポートし、オブジェクトとして取得します。
# CSVファイルをインポート
$data = Import-Csv -Path C:\processes.csv
$data
システム管理コマンド
Get-Process
Get-Processは、現在実行中のプロセスを取得します。
# すべてのプロセスを表示
Get-Process
# 特定のプロセスを表示
Get-Process -Name notepad
Stop-Process
Stop-Processは、実行中のプロセスを停止します。
# プロセスを名前で停止
Stop-Process -Name notepad
# プロセスをIDで停止
Stop-Process -Id 1234
Get-Service
Get-Serviceは、システム上のサービスを取得します。
# すべてのサービスを表示
Get-Service
# 特定のサービスを表示
Get-Service -Name wuauserv
Start-Service
Start-Serviceは、サービスを開始します。
# サービスを開始
Start-Service -Name wuauserv
Stop-Service
Stop-Serviceは、サービスを停止します。
# サービスを停止
Stop-Service -Name wuauserv
Get-WmiObject
Get-WmiObjectは、WMI(Windows Management Instrumentation)オブジェクトを取得します。システム情報を詳細に取得するのに便利です。
# コンピュータの情報を取得
Get-WmiObject -Class Win32_ComputerSystem
# インストールされているソフトウェアを取得
Get-WmiObject -Query "SELECT * FROM Win32_Product"
ネットワークコマンド
Test-Connection
Test-Connectionは、ネットワーク接続をテストします。
Unixシステムのpingコマンドに相当します。
# ホストへの接続をテスト
Test-Connection -ComputerName google.com
# 特定の回数のpingを実行
Test-Connection -ComputerName google.com -Count 4
Get-NetAdapter
Get-NetAdapterは、ネットワークアダプタの情報を取得します。
# すべてのネットワークアダプタを表示
Get-NetAdapter
# 特定のネットワークアダプタを表示
Get-NetAdapter -Name "Ethernet"
Get-NetIPAddress
Get-NetIPAddressは、ネットワークアダプタのIPアドレスを取得します。
# すべてのIPアドレスを表示
Get-NetIPAddress
# 特定のネットワークアダプタのIPアドレスを表示
Get-NetIPAddress -InterfaceAlias "Ethernet"
ユーザー管理コマンド
Get-LocalUser
Get-LocalUserは、ローカルユーザーアカウントを取得します。
# すべてのローカルユーザーを表示
Get-LocalUser
# 特定のユーザーを表示
Get-LocalUser -Name Administrator
New-LocalUser
New-LocalUserは、新しいローカルユーザーアカウントを作成します。
# 新しいユーザーを作成
New-LocalUser -Name "NewUser" -Password (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force) -FullName "New User" -Description "Test user"
Set-LocalUser
Set-LocalUserは、既存のローカルユーザーアカウントのプロパティを変更します。
# ユーザーのフルネームを変更
Set-LocalUser -Name "NewUser" -FullName "Updated User"
Remove-LocalUser
Remove-LocalUserは、ローカルユーザーアカウントを削除します。
# ユーザーを削除
Remove-LocalUser -Name "NewUser"
セキュリティコマンド
Get-ExecutionPolicy
Get-ExecutionPolicyは、現在の実行ポリシーを取得します。
# 現在の実行ポリシーを表示
Get-ExecutionPolicy
Set-ExecutionPolicy
Set-ExecutionPolicyは、実行ポリシーを設定します。
# 実行ポリシーをリモートサインドに設定
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Get-Content
Get-Contentは、ファイルの内容を取得します。
# ファイルの内容を表示
Get-Content -Path C:\file.txt
# ファイルの内容を行ごとに処理
Get-Content -Path C:\file.txt | ForEach-Object { $_ }
Set-Content
Set-Contentは、ファイルに内容を書き込みます。
# ファイルに内容を書き込む
Set-Content -Path C:\file.txt -Value "Hello, World!"
Add-Content
Add-Contentは、ファイルに内容を追加します。
# ファイルに内容を追加
Add-Content -Path C:\file.txt -Value "New line of text"
その他の重要なコマンド
Get-History
Get-Historyは、現在のセッションで実行されたコマンドの履歴を表示します。
# コマンド履歴を表示
Get-History
Invoke-History
Invoke-Historyは、履歴内のコマンドを再実行します。
# 履歴内の特定のコマンドを再実行
Invoke-History -Id 10
Clear-History
Clear-Historyは、コマンド履歴をクリアします。
# すべての履歴をクリア
Clear-History
Get-EventLog
Get-EventLogは、イベントログのエントリを取得します。
これにより、システムイベントやアプリケーションイベントを確認できます。
# システムイベントログの最新10件を表示
Get-EventLog -LogName System -Newest 10
Write-EventLog
Write-EventLogは、イベントログにカスタムエントリを書き込みます。
# カスタムイベントをアプリケーションログに書き込む
Write-EventLog -LogName Application -Source "MyApp" -EventId 1001 -EntryType Information -Message "This is a custom event log entry."
Send-MailMessage
Send-MailMessageは、SMTPサーバーを使用して電子メールを送信します。
# メールを送信
Send-MailMessage -From "you@example.com" -To "someone@example.com" -Subject "Test Email" -Body "This is a test email." -SmtpServer "smtp.example.com"
Get-Event
Get-Eventは、登録されたイベントを取得します。
# すべてのイベントを表示
Get-Event
Register-ObjectEvent
Register-ObjectEventは、オブジェクトのイベントにイベントハンドラを登録します。
# タイマーイベントを登録
$timer = New-Object Timers.Timer
$timer.Interval = 1000
Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action { Write-Output "Timer elapsed!" }
$timer.Start()
New-Object
New-Objectは、新しい.NETオブジェクトを作成します。
# 新しいタイマーオブジェクトを作成
$timer = New-Object Timers.Timer
$timer.Interval = 1000
$timer.Start()
Start-Job
Start-Jobは、バックグラウンドジョブを開始します。
# バックグラウンドジョブを開始
Start-Job -ScriptBlock { Get-Process }
Get-Job
Get-Jobは、現在のセッションで実行中のジョブを取得します。
# すべてのジョブを表示
Get-Job
Receive-Job
Receive-Jobは、ジョブの結果を取得します。
# ジョブの結果を表示
Receive-Job -Id 1
Stop-Job
Stop-Jobは、実行中のジョブを停止します。
# ジョブを停止
Stop-Job -Id 1
Remove-Job
Remove-Jobは、ジョブを削除します。
# ジョブを削除
Remove-Job -Id 1
ConvertTo-Json
ConvertTo-Jsonは、オブジェクトをJSON形式に変換します。
# オブジェクトをJSON形式に変換
$data = Get-Process | Select-Object -First 5
$json = $data | ConvertTo-Json
$json
ConvertFrom-Json
ConvertFrom-Jsonは、JSON形式の文字列をオブジェクトに変換します。
# JSON文字列をオブジェクトに変換
$json = '[
{
"Name": "notepad",
"Id": 1234
}
]'
$data = $json | ConvertFrom-Json
$data
Measure-Object
Measure-Objectは、オブジェクトのプロパティを測定します。
数値の平均、合計、最小値、最大値などを計算するのに便利です。
# 数値の合計と平均を計算
1..10 | Measure-Object -Sum -Average
Select-Object
Select-Objectは、オブジェクトのプロパティを選択します。
# 特定のプロパティを選択
Get-Process | Select-Object -Property Name, Id
Sort-Object
Sort-Objectは、オブジェクトをソートします。
# プロセスを名前でソート
Get-Process | Sort-Object -Property Name
Group-Object
Group-Objectは、オブジェクトを特定のプロパティでグループ化します。
# プロセスをプロセス名でグループ化
Get-Process | Group-Object -Property Name
Where-Object
Where-Objectは、条件に基づいてオブジェクトをフィルタリングします。
# CPU使用率が10%以上のプロセスを表示
Get-Process | Where-Object { $_.CPU -gt 10 }
ForEach-Object
ForEach-Objectは、各オブジェクトに対してアクションを実行します。
# 各プロセスの名前を表示
Get-Process | ForEach-Object { $_.Name }
Start-Sleep
Start-Sleepは、指定された時間だけスクリプトの実行を停止します。
# 5秒間スクリプトの実行を停止
Start-Sleep -Seconds 5
Read-Host
Read-Hostは、ユーザーからの入力を読み取ります。
# ユーザーからの入力を読み取る
$name = Read-Host -Prompt "Enter your name"
Write-Output "Hello, $name!"
Write-Host
Write-Hostは、文字列をコンソールに出力します。
# コンソールにメッセージを表示
Write-Host "Hello, PowerShell!"
Write-Output
Write-Outputは、出力ストリームにオブジェクトを送ります。
# 出力ストリームに文字列を送る
Write-Output "Hello, PowerShell!"
Write-Debug
Write-Debugは、デバッグ情報を出力します。
# デバッグメッセージを表示
Write-Debug "This is a debug message."
Write-Verbose
Write-Verboseは、詳細情報を出力します。
# 詳細メッセージを表示
Write-Verbose "This is a verbose message."
Write-Warning
Write-Warningは、警告メッセージを出力します。
# 警告メッセージを表示
Write-Warning "This is a warning message."
Write-Error
Write-Errorは、エラーメッセージを出力します。
# エラーメッセージを表示
Write-Error "This is an error message."
スクリプト作成と自動化
スクリプトの基本
PowerShellスクリプトは、.ps1拡張子を持つファイルに保存されます。
以下は、基本的なスクリプトの例です。
# スクリプトの開始
Write-Output "Hello, PowerShell!"
# ファイルのバックアップ
$source = "C:\source\directory"
$destination = "C:\backup\directory"
Copy-Item -Path $source -Destination $destination -Recurse -Force
Write-Output "Backup completed."
スケジュールタスクの設定
PowerShellスクリプトを定期的に実行するためには、以下の手順でタスクスケジューラを使用できます。
- タスクスケジューラを開く
- 新しい基本タスクを作成
- トリガーを設定(例:毎日)
- アクションを設定(例:プログラムの開始)
- PowerShellスクリプトのパスを指定
# スクリプトのパス
powershell.exe -File "C:\path\to\script.ps1"
まとめ
PowerShellは、システム管理とタスクの自動化において非常に強力なツールです。
本記事では、PowerShellの主要なコマンドレットとその具体的な使い方を紹介しました。
これらのコマンドをマスターすることで、日々の管理タスクを効率化し、PowerShellの真の力を発揮することができます。
今後も学びを続け、PowerShellの高度な機能を活用していきましょう。