PowerShellのコマンドの詳細と具体的な使い方

PowerShellは、Windows、macOS、Linuxで動作する強力なコマンドラインシェルおよびスクリプト言語です。

システム管理やタスクの自動化において非常に役立ちます。

本記事では、PowerShellの主要なコマンド(コマンドレット)について、その詳細と具体的な使い方を紹介します。

PowerShellの基本から高度な使い方まで網羅し、初心者から上級者まで役立つ情報を提供します。

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スクリプトを定期的に実行するためには、以下の手順でタスクスケジューラを使用できます。

  1. タスクスケジューラを開く
  2. 新しい基本タスクを作成
  3. トリガーを設定(例:毎日)
  4. アクションを設定(例:プログラムの開始)
  5. PowerShellスクリプトのパスを指定
# スクリプトのパス
powershell.exe -File "C:\path\to\script.ps1"

まとめ

PowerShellは、システム管理とタスクの自動化において非常に強力なツールです。

本記事では、PowerShellの主要なコマンドレットとその具体的な使い方を紹介しました。

これらのコマンドをマスターすることで、日々の管理タスクを効率化し、PowerShellの真の力を発揮することができます。

今後も学びを続け、PowerShellの高度な機能を活用していきましょう。

タイトルとURLをコピーしました