「PowerShellでファイルを簡単に開きたい」
「スクリプトの最後に結果ファイルを自動表示したい」
「Invoke-Itemコマンドの詳しい使い方を知りたい」
PowerShellのInvoke-Item
コマンドは、ファイルやフォルダ、URLを既定のアプリケーションで開く便利なコマンドです。
エクスプローラーでのダブルクリック操作をコマンドラインから実行できるため、自動化スクリプトでも頻繁に使用されます。
この記事では、Invoke-Item
の基本的な使い方から実践的な活用例、トラブルシューティングまでを包括的に解説します。
Invoke-Itemの基礎知識

コマンドの概要
Invoke-Itemは、指定されたアイテム(ファイル、フォルダ、URL、アプリケーション)を、そのアイテムに関連付けられた既定のアプリケーションで開くPowerShellコマンドです。
動作原理
このコマンドは、Windowsシェルの「既定のプログラムで開く」機能を利用しています。具体的には:
- ファイル:拡張子に関連付けられたアプリケーションで開く
- フォルダ:エクスプローラーで開く
- URL:既定のWebブラウザで開く
- 実行ファイル:アプリケーションとして起動
エイリアス
Invoke-Item
には以下のエイリアスが定義されています:
# エイリアスの確認
Get-Alias -Definition Invoke-Item
# 出力例:
# ii -> Invoke-Item
# start -> Invoke-Item (Windows)
使用例:
# 以下はすべて同じ動作
Invoke-Item "C:\temp\file.txt"
ii "C:\temp\file.txt"
start "C:\temp\file.txt"
基本的な使い方と構文

基本構文
Invoke-Item [-Path] <String[]> [-WhatIf] [-Confirm] [<CommonParameters>]
パラメータ詳細
パラメータ | 説明 | 必須 | 型 |
---|---|---|---|
-Path | 開くアイテムのパス | はい | String[] |
-WhatIf | 実際に実行せず、何が起こるかを表示 | いいえ | SwitchParameter |
-Confirm | 実行前に確認を求める | いいえ | SwitchParameter |
基本的な使用方法
# 最もシンプルな形式
Invoke-Item "C:\Users\Username\Documents\report.docx"
# パラメータ名を省略(推奨)
Invoke-Item "C:\temp\data.xlsx"
# 複数のファイルを同時に開く
Invoke-Item "file1.txt", "file2.txt", "file3.txt"
# WhatIfで動作確認
Invoke-Item "C:\temp\file.txt" -WhatIf
実践的な使用例

ファイル操作
テキストファイルを開く
# メモ帳で開く(.txtの既定アプリがメモ帳の場合)
Invoke-Item "C:\logs\application.log"
# CSVファイルをExcelで開く
Invoke-Item "C:\data\sales_report.csv"
# PDFファイルを開く
Invoke-Item "C:\documents\manual.pdf"
画像ファイルを開く
# 画像ビューアで開く
Invoke-Item "C:\pictures\screenshot.png"
# 複数の画像を連続で開く
Get-ChildItem "C:\pictures\*.jpg" | ForEach-Object {
Invoke-Item $_.FullName
Start-Sleep -Seconds 1 # 1秒間隔で開く
}
フォルダ操作
エクスプローラーでフォルダを開く
# ユーザーのDocumentsフォルダを開く
Invoke-Item $env:USERPROFILE\Documents
# 現在のディレクトリを開く
Invoke-Item .
# 親ディレクトリを開く
Invoke-Item ..
# 特定のプロジェクトフォルダを開く
Invoke-Item "C:\Projects\WebApp"
システムフォルダへのクイックアクセス
# システムの重要フォルダ
Invoke-Item $env:WINDIR # Windows フォルダ
Invoke-Item $env:PROGRAMFILES # Program Files
Invoke-Item $env:APPDATA # アプリデータ
Invoke-Item $env:TEMP # 一時フォルダ
Invoke-Item $env:USERPROFILE\Desktop # デスクトップ
Webページとネットワークリソース
URLを開く
# Webページを既定のブラウザで開く
Invoke-Item "https://www.microsoft.com"
Invoke-Item "https://github.com"
# ローカルHTMLファイルを開く
Invoke-Item "C:\web\index.html"
# ネットワーク共有フォルダを開く
Invoke-Item "\\server\shared\documents"
アプリケーションの起動
アプリケーション実行ファイルの起動
# アプリケーションを起動
Invoke-Item "C:\Program Files\Notepad++\notepad++.exe"
# システムアプリを起動
Invoke-Item "notepad.exe" # メモ帳
Invoke-Item "calc.exe" # 電卓
Invoke-Item "mspaint.exe" # ペイント
他コマンドとの比較

Start-Processとの違い
特徴 | Invoke-Item | Start-Process |
---|---|---|
目的 | 既定アプリで開く | プロセスを詳細制御して起動 |
引数指定 | 不可 | 可能 |
ウィンドウ状態制御 | 不可 | 可能(最小化、最大化など) |
権限昇格 | 不可 | 可能(RunAs) |
待機 | 不可 | 可能(-Wait) |
作業ディレクトリ | 不可 | 可能 |
実例比較:
# Invoke-Item - シンプルに開く
Invoke-Item "document.pdf"
# Start-Process - 詳細制御
Start-Process "document.pdf" -WorkingDirectory "C:\temp" -WindowStyle Maximized
explorer.exeとの比較
# Invoke-Item でフォルダを開く
Invoke-Item "C:\Users\Documents"
# explorer.exe でフォルダを開く(同等の結果)
Start-Process explorer "C:\Users\Documents"
# explorer.exe で特定ファイルを選択状態で開く
Start-Process explorer "/select,C:\Users\Documents\file.txt"
高度な活用テクニック

条件分岐での使用
# ファイルの存在確認後に開く
function Open-FileIfExists {
param([string]$FilePath)
if (Test-Path $FilePath) {
Write-Host "ファイルを開いています: $FilePath" -ForegroundColor Green
Invoke-Item $FilePath
} else {
Write-Host "ファイルが見つかりません: $FilePath" -ForegroundColor Red
}
}
# 使用例
Open-FileIfExists "C:\reports\monthly.xlsx"
パイプラインでの活用
# 最新のログファイルを開く
Get-ChildItem "C:\logs\*.log" |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1 |
ForEach-Object { Invoke-Item $_.FullName }
# 特定パターンのファイルを一括で開く
Get-ChildItem "*.txt" | Where-Object {$_.Name -like "*error*"} |
ForEach-Object { Invoke-Item $_.FullName }
エラーハンドリング付きの関数
function Invoke-ItemSafely {
param(
[Parameter(Mandatory)]
[string]$Path,
[string]$ErrorMessage = "ファイルを開けませんでした"
)
try {
if (Test-Path $Path) {
Invoke-Item $Path
Write-Host "正常に開きました: $Path" -ForegroundColor Green
} else {
throw "パスが存在しません: $Path"
}
} catch {
Write-Host "$ErrorMessage : $_" -ForegroundColor Red
return $false
}
return $true
}
# 使用例
Invoke-ItemSafely "C:\reports\data.xlsx" "Excelファイルを開けませんでした"
複数ファイル形式の処理
# ファイル拡張子に応じた処理
function Open-FileByType {
param([string]$FilePath)
$extension = [System.IO.Path]::GetExtension($FilePath).ToLower()
switch ($extension) {
".txt" {
Write-Host "テキストファイルを開きます" -ForegroundColor Cyan
Invoke-Item $FilePath
}
".xlsx" {
Write-Host "Excelファイルを開きます" -ForegroundColor Green
Invoke-Item $FilePath
}
".pdf" {
Write-Host "PDFファイルを開きます" -ForegroundColor Blue
Invoke-Item $FilePath
}
default {
Write-Host "既定のアプリケーションで開きます" -ForegroundColor Yellow
Invoke-Item $FilePath
}
}
}
トラブルシューティング

よくあるエラーと解決方法
エラー1: 指定されたパスが見つからない
# エラー例
Invoke-Item : 項目 'C:\nonexistent\file.txt' が存在しないため、項目を呼び出すことができません。
# 解決方法: パスの存在確認
if (Test-Path "C:\temp\file.txt") {
Invoke-Item "C:\temp\file.txt"
} else {
Write-Host "ファイルが存在しません" -ForegroundColor Red
}
エラー2: 関連付けられたアプリケーションがない
# 拡張子に関連付けがない場合の対処
function Open-WithDefaultOrNotepad {
param([string]$FilePath)
try {
Invoke-Item $FilePath
} catch {
Write-Host "既定のアプリで開けませんでした。メモ帳で開きます。" -ForegroundColor Yellow
Start-Process notepad $FilePath
}
}
エラー3: アクセス権限の問題
# 管理者権限が必要な場合
function Open-AsAdmin {
param([string]$FilePath)
try {
Invoke-Item $FilePath
} catch {
Write-Host "管理者権限で開こうとしています..." -ForegroundColor Yellow
Start-Process $FilePath -Verb RunAs
}
}
デバッグとログ出力
function Invoke-ItemWithLogging {
param(
[string]$Path,
[string]$LogFile = "C:\temp\invoke-item.log"
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "$timestamp - Attempting to open: $Path"
# ログ出力
Add-Content -Path $LogFile -Value $logEntry
try {
Invoke-Item $Path
$successLog = "$timestamp - SUCCESS: Opened $Path"
Add-Content -Path $LogFile -Value $successLog
Write-Host "✓ 正常に開きました: $Path" -ForegroundColor Green
} catch {
$errorLog = "$timestamp - ERROR: Failed to open $Path - $_"
Add-Content -Path $LogFile -Value $errorLog
Write-Host "✗ エラーが発生しました: $_" -ForegroundColor Red
}
}
自動化スクリプトでの活用
レポート生成後の自動表示
# データ処理とレポート表示の自動化
function Generate-AndOpenReport {
param(
[string]$DataSource,
[string]$OutputPath = "C:\reports\daily_report.xlsx"
)
Write-Host "レポートを生成しています..." -ForegroundColor Cyan
# データ処理(例)
$data = Import-Csv $DataSource
$processedData = $data | Group-Object Status |
Select-Object Name, Count
# Excelファイルとして出力(ImportExcelモジュール使用例)
$processedData | Export-Excel -Path $OutputPath -AutoSize -BoldTopRow
Write-Host "レポートが生成されました: $OutputPath" -ForegroundColor Green
# 自動的にファイルを開く
Start-Sleep -Seconds 1
Invoke-Item $OutputPath
}
ログ解析結果の表示
# ログ解析とエラーファイル表示
function Analyze-LogsAndOpen {
param(
[string]$LogDirectory = "C:\logs",
[string]$Pattern = "ERROR"
)
$errorLogPath = "C:\temp\error_summary.txt"
# エラーログの抽出
Get-ChildItem -Path $LogDirectory -Filter "*.log" |
ForEach-Object {
$content = Get-Content $_.FullName | Where-Object {$_ -match $Pattern}
if ($content) {
"=== $($_.Name) ===" | Add-Content $errorLogPath
$content | Add-Content $errorLogPath
"" | Add-Content $errorLogPath
}
}
if (Test-Path $errorLogPath) {
Write-Host "エラー分析結果を表示します" -ForegroundColor Yellow
Invoke-Item $errorLogPath
} else {
Write-Host "エラーは見つかりませんでした" -ForegroundColor Green
}
}
プロジェクト環境の一括オープン
# 開発環境の一括セットアップ
function Open-DevelopmentEnvironment {
param([string]$ProjectPath)
if (!(Test-Path $ProjectPath)) {
Write-Host "プロジェクトパスが見つかりません: $ProjectPath" -ForegroundColor Red
return
}
Write-Host "開発環境をセットアップしています..." -ForegroundColor Cyan
# プロジェクトフォルダを開く
Invoke-Item $ProjectPath
# 重要なファイルを開く
$importantFiles = @(
"README.md",
"package.json",
"config.json"
)
foreach ($file in $importantFiles) {
$filePath = Join-Path $ProjectPath $file
if (Test-Path $filePath) {
Start-Sleep -Milliseconds 500
Invoke-Item $filePath
}
}
# ブラウザでローカル開発サーバーを開く
Start-Sleep -Seconds 2
Invoke-Item "http://localhost:3000"
Write-Host "開発環境のセットアップが完了しました" -ForegroundColor Green
}
# 使用例
Open-DevelopmentEnvironment "C:\Projects\WebApp"
システム情報の可視化
# システム情報レポートの生成と表示
function Generate-SystemReport {
$reportPath = "C:\temp\system_report.html"
# システム情報の収集
$computerInfo = Get-ComputerInfo
$processes = Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
$services = Get-Service | Where-Object {$_.Status -eq "Stopped"} | Select-Object -First 10
# HTMLレポートの生成
$html = @"
<html>
<head><title>System Report - $(Get-Date)</title></head>
<body>
<h1>System Report</h1>
<h2>Computer Information</h2>
<p>Computer Name: $($computerInfo.CsName)</p>
<p>OS Version: $($computerInfo.WindowsProductName)</p>
<p>Total Memory: $([math]::Round($computerInfo.CsTotalPhysicalMemory/1GB, 2)) GB</p>
<h2>Top CPU Processes</h2>
<table border='1'>
<tr><th>Process Name</th><th>CPU</th><th>Memory (MB)</th></tr>
"@
foreach ($process in $processes) {
$html += "<tr><td>$($process.ProcessName)</td><td>$($process.CPU)</td><td>$([math]::Round($process.WorkingSet/1MB, 2))</td></tr>"
}
$html += "</table></body></html>"
# ファイル出力と表示
$html | Out-File -FilePath $reportPath -Encoding UTF8
Write-Host "システムレポートを生成しました" -ForegroundColor Green
Invoke-Item $reportPath
}
まとめ
Invoke-Item
は、PowerShellでファイル、フォルダ、URL、アプリケーションを簡単に開くための非常に便利なコマンドです。
シンプルな構文でありながら、様々な場面で活用できる汎用性の高いコマンドといえます。
重要なポイント
- 直感的な操作:エクスプローラーのダブルクリックと同等の動作
- 柔軟な対象:ファイル、フォルダ、URL、実行ファイルに対応
- 自動化との親和性:スクリプトでの結果表示に最適
- エラーハンドリング:適切な例外処理で堅牢なスクリプト作成
使い分けの指針
Invoke-Itemが適している場面
- ファイルを既定のアプリで開く
- フォルダをエクスプローラーで表示
- Webページをブラウザで開く
- 簡単なアプリケーション起動
Start-Processが適している場面
- コマンドライン引数の指定が必要
- ウィンドウ状態の制御が必要
- 管理者権限での実行が必要
- プロセス完了の待機が必要
コメント