PowerShellを使っていて、こんなことを思ったことはありませんか?
- 「レジストリをファイルのように操作できたらいいのに…」
- 「環境変数を簡単に確認・変更したい」
- 「証明書の管理をコマンドラインでやりたい」
実は、PowerShellには 「PowerShellドライブ」 という機能があり、これらの操作を統一的に行うことができます。
PowerShellドライブとは
- ファイルシステム以外のデータも「ドライブ」として扱える仕組み
- レジストリ、環境変数、証明書なども同じように操作可能
- 「C:」や「D:」と同じ感覚で様々なデータにアクセスできる
この記事では、PowerShellドライブの基本から実践的な使い方まで、初心者にも分かりやすく説明します。
PowerShellドライブとは?

基本的な概念
通常のWindowsでは、ハードディスクが「C:」や「D:」として認識されます。
PowerShellドライブは、この概念を拡張して、様々なデータストアを「ドライブ」として扱えるようにした仕組みです。
従来の考え方
C: → ハードディスクのCパーティション
D: → ハードディスクのDパーティション
PowerShellドライブの考え方
C: → ファイルシステム
HKLM: → レジストリ(HKEY_LOCAL_MACHINE)
Env: → 環境変数
Cert: → 証明書ストア
標準で用意されているドライブ
PowerShellには最初から多くのドライブが用意されています:
ドライブ名 | 内容 | 例 |
---|---|---|
C: , D: | ファイルシステム | C:\Windows , D:\Data |
HKLM: | レジストリ(ローカルマシン) | HKLM:\SOFTWARE |
HKCU: | レジストリ(現在のユーザー) | HKCU:\Software |
Env: | 環境変数 | Env:\PATH |
Function: | 定義済み関数 | Function:\Get-Process |
Variable: | 変数 | Variable:\HOME |
Alias: | エイリアス | Alias:\ls |
Cert: | 証明書ストア | Cert:\LocalMachine |
ドライブの基本操作
利用可能なドライブ一覧の表示
すべてのドライブを表示
Get-PSDrive
実行例
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
Alias Alias
C 245.67 186.33 FileSystem C:\
Cert Certificate \
Env Environment
Function Function
HKCU Registry HKEY_CURRENT_USER
HKLM Registry HKEY_LOCAL_MACHINE
Variable Variable
特定のプロバイダーのドライブのみ表示
Get-PSDrive -PSProvider FileSystem # ファイルシステムのみ
Get-PSDrive -PSProvider Registry # レジストリのみ
ドライブ間の移動
基本的な移動方法
# ファイルシステムから環境変数ドライブへ
Set-Location Env:
# レジストリドライブへ移動
Set-Location HKLM:
# 元のファイルシステムに戻る
Set-Location C:
短縮形
cd Env: # Set-Locationの短縮形
cd HKLM:
cd C:
ドライブの内容確認
現在のドライブの内容を表示
Get-ChildItem
# または
ls # エイリアス
dir # エイリアス
特定のドライブの内容を直接確認
Get-ChildItem Env: # 環境変数の一覧
Get-ChildItem Function: # 関数の一覧
Get-ChildItem HKLM:\ # レジストリのルート
各ドライブの詳細な使い方

環境変数ドライブ(Env:)
環境変数の確認
# すべての環境変数を表示
Get-ChildItem Env:
# 特定の環境変数を確認
Get-Item Env:\PATH
Get-Item Env:\USERNAME
Get-Item Env:\COMPUTERNAME
# 短縮形
$env:PATH
$env:USERNAME
環境変数の設定
# 新しい環境変数を作成
Set-Item Env:\MY_VARIABLE "Hello World"
# 既存の環境変数を変更
Set-Item Env:\PATH "$env:PATH;C:\MyTools"
# 短縮形
$env:MY_VARIABLE = "Hello World"
環境変数の削除
Remove-Item Env:\MY_VARIABLE
実用例:開発環境の設定
# 開発用の環境変数を設定
$env:JAVA_HOME = "C:\Program Files\Java\jdk-11"
$env:MAVEN_HOME = "C:\apache-maven-3.8.1"
$env:PATH = "$env:PATH;$env:JAVA_HOME\bin;$env:MAVEN_HOME\bin"
# 設定確認
echo "Java Home: $env:JAVA_HOME"
echo "Maven Home: $env:MAVEN_HOME"
レジストリドライブ(HKLM:, HKCU:)
レジストリの参照
# Windowsのバージョン情報
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion
# インストール済みプログラムの一覧
Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
# 現在のユーザーの設定
Get-ChildItem HKCU:\Software
特定の値の取得
# Windowsの製品名
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).ProductName
# 現在のバージョン
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CurrentVersion
レジストリ値の設定(要管理者権限)
# 新しいキーを作成
New-Item HKCU:\Software\MyApp
# 値を設定
Set-ItemProperty HKCU:\Software\MyApp -Name "Version" -Value "1.0"
Set-ItemProperty HKCU:\Software\MyApp -Name "InstallPath" -Value "C:\MyApp"
# 値を確認
Get-ItemProperty HKCU:\Software\MyApp
証明書ドライブ(Cert:)
証明書の確認
# ローカルマシンの証明書ストア
Get-ChildItem Cert:\LocalMachine
# 個人証明書
Get-ChildItem Cert:\LocalMachine\My
# 信頼されたルート証明機関
Get-ChildItem Cert:\LocalMachine\Root
# 現在のユーザーの個人証明書
Get-ChildItem Cert:\CurrentUser\My
証明書の詳細情報
# 特定の証明書の詳細
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.Subject -like "*example.com*" } |
Format-List *
# 有効期限が近い証明書を確認
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.NotAfter -lt (Get-Date).AddDays(30) }
関数ドライブ(Function:)
定義済み関数の確認
# すべての関数を表示
Get-ChildItem Function:
# 特定の関数を検索
Get-ChildItem Function: | Where-Object Name -like "*Process*"
# 関数の定義内容を確認
Get-Content Function:\Get-Process
関数の定義と削除
# 新しい関数を定義
function MyFunction { Write-Host "Hello from MyFunction!" }
# 関数の確認
Get-ChildItem Function:\MyFunction
# 関数の削除
Remove-Item Function:\MyFunction
カスタムドライブの作成
一時的なドライブの作成
ファイルシステムドライブ
# よく使うフォルダにドライブを割り当て
New-PSDrive -Name "Projects" -PSProvider FileSystem -Root "C:\Users\$env:USERNAME\Documents\Projects"
# 使用方法
cd Projects:
ls
# ドライブの削除
Remove-PSDrive -Name "Projects"
ネットワークドライブ
# ネットワーク共有をドライブとして割り当て
New-PSDrive -Name "ShareData" -PSProvider FileSystem -Root "\\server\share" -Credential (Get-Credential)
# 使用
cd ShareData:
ls
# 削除
Remove-PSDrive -Name "ShareData"
永続的なドライブの作成
プロファイルに設定を保存
# PowerShellプロファイルを編集
notepad $PROFILE
# プロファイルに以下を追加
New-PSDrive -Name "Projects" -PSProvider FileSystem -Root "C:\MyProjects" -Scope Global
New-PSDrive -Name "Logs" -PSProvider FileSystem -Root "C:\Logs" -Scope Global
実践的な活用例

システム情報の収集
# システム情報収集スクリプト
function Get-SystemInfo {
$info = @{}
# OS情報
$info.OSVersion = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).ProductName
$info.CurrentVersion = (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion).CurrentVersion
# ユーザー情報
$info.CurrentUser = $env:USERNAME
$info.ComputerName = $env:COMPUTERNAME
# パス情報
$info.PowerShellPath = $env:PSModulePath
$info.TempPath = $env:TEMP
return $info
}
# 実行
$systemInfo = Get-SystemInfo
$systemInfo | Format-Table -AutoSize
環境変数の管理
# 開発環境セットアップスクリプト
function Set-DevelopmentEnvironment {
param(
[string]$JavaHome = "C:\Program Files\Java\jdk-11",
[string]$NodeHome = "C:\Program Files\nodejs",
[string]$PythonHome = "C:\Python39"
)
# 開発ツールのパスを設定
$env:JAVA_HOME = $JavaHome
$env:NODE_HOME = $NodeHome
$env:PYTHON_HOME = $PythonHome
# PATHに追加
$newPaths = @(
"$env:JAVA_HOME\bin"
"$env:NODE_HOME"
"$env:PYTHON_HOME"
"$env:PYTHON_HOME\Scripts"
)
foreach ($path in $newPaths) {
if ($env:PATH -notlike "*$path*") {
$env:PATH = "$env:PATH;$path"
}
}
Write-Host "開発環境が設定されました。"
Write-Host "Java: $(java -version 2>&1 | Select-String version)"
Write-Host "Node: $(node --version)"
Write-Host "Python: $(python --version)"
}
# 実行
Set-DevelopmentEnvironment
レジストリ設定の管理
# アプリケーション設定の管理
function Set-AppConfiguration {
param(
[string]$AppName,
[hashtable]$Settings
)
$regPath = "HKCU:\Software\$AppName"
# キーが存在しない場合は作成
if (-not (Test-Path $regPath)) {
New-Item $regPath -Force | Out-Null
Write-Host "新しい設定キーを作成: $regPath"
}
# 設定値を保存
foreach ($key in $Settings.Keys) {
Set-ItemProperty $regPath -Name $key -Value $Settings[$key]
Write-Host "設定: $key = $($Settings[$key])"
}
}
# 使用例
$myAppSettings = @{
"Version" = "2.1.0"
"LastUsed" = (Get-Date).ToString()
"Theme" = "Dark"
"AutoSave" = $true
}
Set-AppConfiguration -AppName "MyApplication" -Settings $myAppSettings
証明書の監視
# 証明書の有効期限監視
function Get-ExpiringCertificates {
param(
[int]$DaysAhead = 30
)
$expiryDate = (Get-Date).AddDays($DaysAhead)
$expiring = Get-ChildItem Cert:\LocalMachine\My |
Where-Object {
$_.NotAfter -lt $expiryDate -and
$_.NotAfter -gt (Get-Date)
} |
Select-Object Subject, NotAfter, @{
Name="DaysRemaining"
Expression={($_.NotAfter - (Get-Date)).Days}
}
if ($expiring) {
Write-Warning "有効期限が近い証明書が見つかりました:"
$expiring | Format-Table -AutoSize
} else {
Write-Host "有効期限が近い証明書はありません。"
}
return $expiring
}
# 実行
Get-ExpiringCertificates -DaysAhead 60
トラブルシューティング
よくある問題と解決方法
問題1:ドライブにアクセスできない
# エラー例
cd HKLM:\SOFTWARE
# Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE' is denied.
# 解決方法:管理者として実行
# PowerShellを管理者として起動
問題2:カスタムドライブが見つからない
# 作成したドライブが見つからない場合
Get-PSDrive -Name "MyDrive"
# ドライブが存在するか確認
if (Get-PSDrive -Name "MyDrive" -ErrorAction SilentlyContinue) {
Write-Host "ドライブが存在します"
} else {
Write-Host "ドライブが見つかりません"
# 再作成
New-PSDrive -Name "MyDrive" -PSProvider FileSystem -Root "C:\MyFolder"
}
問題3:環境変数の変更が反映されない
# 現在のセッションでのみ有効な変更
$env:MY_VAR = "value"
# システム全体で永続的に設定
[Environment]::SetEnvironmentVariable("MY_VAR", "value", "Machine") # 要管理者権限
[Environment]::SetEnvironmentVariable("MY_VAR", "value", "User") # 現在のユーザー
デバッグ用のスクリプト
# ドライブの状態診断
function Test-DriveHealth {
Write-Host "=== PowerShell ドライブ診断 ===" -ForegroundColor Green
# 標準ドライブの確認
$standardDrives = @("C", "Env", "HKLM", "HKCU", "Function", "Variable", "Alias")
foreach ($drive in $standardDrives) {
try {
$driveInfo = Get-PSDrive -Name $drive -ErrorAction Stop
Write-Host "✓ $drive : OK" -ForegroundColor Green
}
catch {
Write-Host "✗ $drive : エラー - $($_.Exception.Message)" -ForegroundColor Red
}
}
# カスタムドライブの確認
$customDrives = Get-PSDrive | Where-Object { $_.Name -notin $standardDrives }
if ($customDrives) {
Write-Host "`nカスタムドライブ:" -ForegroundColor Yellow
$customDrives | Format-Table Name, Provider, Root -AutoSize
}
}
# 実行
Test-DriveHealth
まとめ
PowerShellドライブは、様々なデータストアを統一的に操作できる強力な機能です。
重要なポイント
- 統一的な操作: ファイル、レジストリ、環境変数などを同じコマンドで操作
- 豊富な標準ドライブ: システムの様々な要素にアクセス可能
- カスタマイズ性: 独自のドライブを作成して作業効率化
- スクリプト活用: 自動化や監視に最適
基本コマンド一覧
# ドライブ操作
Get-PSDrive # ドライブ一覧
Set-Location Env: # ドライブ移動
Get-ChildItem # 内容確認
# カスタムドライブ
New-PSDrive -Name "MyDrive" -PSProvider FileSystem -Root "C:\MyFolder"
Remove-PSDrive -Name "MyDrive"
# 特定ドライブの操作
Get-Item Env:\PATH # 環境変数
Get-ItemProperty HKLM:\SOFTWARE\Microsoft # レジストリ
Get-ChildItem Cert:\LocalMachine\My # 証明書
コメント