Windowsのコマンドプロンプトでドライブ一覧を表示する方法|システム管理の基本

Windows

パソコンで作業をしていて、「いまどんなドライブがつながっているかな?」「USBメモリはちゃんと認識されているかな?」と思ったことはありませんか?

普通はエクスプローラー(フォルダを開くアプリ)で確認しますが、実はコマンドプロンプトという文字だけの画面でも、簡単にドライブの一覧を見ることができます。

この方法を覚えると、バッチファイル(自動処理のプログラム)を作ったり、システム管理の作業がとても楽になります。

この記事でわかること

  • コマンドプロンプトでドライブ一覧を表示する方法
  • 複数のコマンドの違いと使い分け
  • 実際のシステム管理での活用例
  • バッチファイルでの自動処理方法

こんな人におすすめ

  • ITの仕事をしている人
  • プログラミングを学んでいる人
  • パソコンの管理を効率化したい人
  • バッチファイルを作りたい人
スポンサーリンク
  1. コマンドプロンプトってなに?ドライブってなに?
    1. コマンドプロンプトとは
    2. ドライブとは
    3. なぜコマンドで確認するの?
  2. 基本のコマンドでドライブ一覧を表示する
    1. 方法1:wmicコマンド(一番シンプル)
    2. 方法2:fsutilコマンド(詳細情報つき)
    3. 方法3:PowerShellコマンド(高機能)
    4. 方法4:dirコマンド(番外編)
    5. どのコマンドを使うべき?
  3. コマンドの特徴と使い分け詳細ガイド
    1. 各コマンドの詳細比較
    2. wmicコマンドの詳細活用
    3. fsutilコマンドの詳細活用
    4. PowerShellコマンドの詳細活用
    5. 環境別の推奨コマンド
    6. エラー対処法
  4. 実践的な応用例とバッチファイル活用
    1. 応用例1:ドライブ一覧をファイルに保存
    2. 応用例2:USBメモリの自動検出バッチファイル
    3. 応用例3:ドライブ容量監視バッチファイル
    4. 応用例4:ネットワークドライブの状態確認
    5. 応用例5:定期的なドライブ情報ログ作成
    6. 応用例6:PowerShellでの高度な分析
  5. システム管理での実践活用
    1. サーバー管理での活用
    2. データバックアップでの活用
    3. USBメモリの安全な取り外し確認
    4. システム監視での活用
    5. ログ管理と分析
  6. トラブルシューティングと高度な設定
    1. よくある問題と解決方法
    2. 環境別の最適化設定
    3. 自動化とスケジューリング
    4. ネットワーク環境での活用
  7. まとめ:コマンドライン駆動でシステム管理をレベルアップ
    1. 重要なポイントをおさらい
    2. セキュリティと注意点

コマンドプロンプトってなに?ドライブってなに?

コマンドプロンプトとは

コマンドプロンプトとは、文字だけでパソコンを操作する黒い画面のことです。

マウスでクリックする代わりに、キーボードで命令(コマンド)を入力してパソコンを操作します。

コマンドプロンプトを開く方法

  1. スタートメニューで「cmd」と入力
  2. 「コマンドプロンプト」をクリック
  3. 黒い画面が表示される

または

  1. Windows + Rキーを押す
  2. 「cmd」と入力してEnter

ドライブとは

ドライブとは、パソコンでデータを保存する場所のことです。それぞれに「C:」「D:」などのアルファベットが割り当てられています。

よくあるドライブの種類

  • Cドライブ:Windowsがインストールされているメインのハードディスク
  • Dドライブ:データ保存用のハードディスクやDVD/CD
  • Eドライブ:USBメモリや外付けハードディスク
  • その他:ネットワークドライブなど

なぜコマンドで確認するの?

メリット

  • 速い:マウスで操作するより早い
  • 自動化:バッチファイルで処理を自動化できる
  • 詳細情報:エクスプローラーでは見えない情報も取得可能
  • リモート操作:遠隔地のパソコンも同じ方法で操作

使用場面

  • USBメモリが正しく認識されているか確認
  • 複数のパソコンで同じ作業を自動化
  • サーバー管理での効率的な確認作業
  • プログラムからドライブ情報を取得

では、実際のコマンドを見ていきましょう。

基本のコマンドでドライブ一覧を表示する

方法1:wmicコマンド(一番シンプル)

説明:Windows Management Instrumentation(WMI)を使ってドライブ一覧を表示

コマンド

wmic logicaldisk get name

実行例

C:\Users\ユーザー名>wmic logicaldisk get name

Name
C:
D:
E:

このコマンドの特徴

  • 管理者権限が不要
  • 結果がシンプルで見やすい
  • どのWindowsでも使える
  • バッチファイルに組み込みやすい

注意点

  • Windows 10以降では「将来削除される予定」となっている
  • ただし現在でも問題なく使用可能

方法2:fsutilコマンド(詳細情報つき)

説明:ファイルシステムユーティリティを使ってドライブ一覧を表示

コマンド

fsutil fsinfo drives

実行例

C:\Users\ユーザー名>fsutil fsinfo drives

Drives: C:\ D:\ E:\

このコマンドの特徴

  • より詳細な情報が取得可能
  • ファイルシステムの管理に特化
  • 安定して動作する

注意点

  • 管理者権限が必要
  • 一般ユーザーでは実行できない

管理者権限でコマンドプロンプトを開く方法

  1. スタートメニューで「cmd」と入力
  2. 「コマンドプロンプト」を右クリック
  3. 「管理者として実行」を選択

方法3:PowerShellコマンド(高機能)

説明:PowerShellというより高機能なコマンド環境を使用

コマンド

Get-PSDrive -PSProvider FileSystem

実行例

PS C:\Users\ユーザー名> Get-PSDrive -PSProvider FileSystem

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
C                 125.45        234.55 FileSystem    C:\
D                  45.20        154.80 FileSystem    D:\
E                   2.15         27.85 FileSystem    E:\

このコマンドの特徴

  • 使用容量と空き容量も表示
  • より詳細な情報が一度に取得可能
  • 将来性が高い(Microsoftが推奨)
  • スクリプト処理に最適

PowerShellを開く方法

  1. スタートメニューで「powershell」と入力
  2. 「Windows PowerShell」をクリック
  3. 青い画面が表示される

方法4:dirコマンド(番外編)

説明:各ドライブの存在確認を兼ねた方法

コマンド

dir /ad C:\ D:\ E:\ 2>nul

実行例

C:\Users\ユーザー名>dir /ad C:\ D:\ E:\ 2>nul

C:\ のディレクトリ

2024/01/15  14:30    <DIR>          Program Files
2024/01/15  14:30    <DIR>          Users
2024/01/15  14:30    <DIR>          Windows

D:\ のディレクトリ

2024/01/15  15:00    <DIR>          Data
2024/01/15  15:00    <DIR>          Backup

このコマンドの特徴

  • ドライブの存在確認と中身の確認を同時に実行
  • エラーが出た場合はそのドライブが存在しない
  • 古いWindowsでも確実に動作

どのコマンドを使うべき?

用途別の選択指針

シンプルにドライブ名だけ知りたい

wmic logicaldisk get name

詳細な情報も含めて確認したい

Get-PSDrive -PSProvider FileSystem

管理者権限で詳細確認

fsutil fsinfo drives

古い環境での互換性重視

dir /ad C:\ D:\ E:\ 2>nul

次の章では、これらのコマンドの使い分けをより詳しく説明します。

コマンドの特徴と使い分け詳細ガイド

各コマンドの詳細比較

機能比較表

コマンド権限情報量速度将来性バッチ適性
wmic不要基本
fsutil詳細
PowerShell不要最詳細最高
dir不要中程度

wmicコマンドの詳細活用

基本的な使い方

wmic logicaldisk get name

より詳細な情報を取得

wmic logicaldisk get name,size,freespace,drivetype

実行結果例

Name  Size         FreeSpace    DriveType
C:    500000000000 200000000000 3
D:    200000000000 150000000000 3
E:    32000000000  30000000000  2

DriveType の意味

  • 2:リムーバブルディスク(USBメモリ、フロッピー)
  • 3:ローカルディスク(ハードディスク、SSD)
  • 4:ネットワークドライブ
  • 5:光学ドライブ(CD、DVD、Blu-ray)

特定のドライブタイプだけ表示

wmic logicaldisk where drivetype=2 get name

(USBメモリなどのリムーバブルディスクのみ表示)

fsutilコマンドの詳細活用

基本的な使い方

fsutil fsinfo drives

特定ドライブの詳細情報

fsutil fsinfo drivetype C:

実行結果例

C: - Fixed Drive

ボリューム情報の取得

fsutil fsinfo volumeinfo C:

実行結果例

Volume Name : Windows
Volume Serial Number : 0x12345678
Max Component Length : 255
File System Name : NTFS
Supports Case-sensitive filenames : Disabled
Preserves Case of filenames : Enabled
Supports Unicode in filenames : Enabled

PowerShellコマンドの詳細活用

基本的な使い方

Get-PSDrive -PSProvider FileSystem

特定の情報のみ表示

Get-PSDrive -PSProvider FileSystem | Select-Object Name, Root

実行結果例

Name Root
---- ----
C    C:\
D    D:\
E    E:\

CSV形式で出力

Get-PSDrive -PSProvider FileSystem | Export-Csv -Path drives.csv -NoTypeInformation

ドライブの使用率を計算

Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    $used = $_.Used / 1GB
    $free = $_.Free / 1GB
    $total = $used + $free
    $percent = [math]::Round(($used / $total) * 100, 2)
    Write-Output "$($_.Name): $percent% used"
}

環境別の推奨コマンド

新しいシステム(Windows 10/11)

Get-PSDrive -PSProvider FileSystem

理由:将来性が高く、詳細な情報が取得可能

古いシステム(Windows 7/8)

wmic logicaldisk get name

理由:互換性が高く、確実に動作

サーバー環境

fsutil fsinfo drives

理由:システム管理に特化した詳細情報

バッチファイル組み込み

wmic logicaldisk get name /format:list

理由:解析しやすい形式で出力

エラー対処法

「’wmic’ は、内部コマンドまたは外部コマンド…」エラー

  • Windows 11の一部バージョンで発生
  • PowerShellコマンドを代替使用
  • またはwmic.exeのフルパス指定

「アクセスが拒否されました」エラー(fsutil)

  • 管理者権限でコマンドプロンプトを起動
  • または他のコマンドを使用

PowerShellで「実行ポリシー」エラー

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

これらの詳細を理解することで、状況に応じて最適なコマンドを選択できるようになります。

実践的な応用例とバッチファイル活用

応用例1:ドライブ一覧をファイルに保存

説明:ドライブ情報をテキストファイルに保存して、後で確認や比較に使用

PowerShellでの保存

Get-PSDrive -PSProvider FileSystem | Out-File -FilePath "C:\drives_info.txt" -Encoding UTF8

wmicでの保存

wmic logicaldisk get name,size,freespace > drives.txt

実行結果ファイル例

Name  Size         FreeSpace
C:    500000000000 200000000000
D:    200000000000 150000000000
E:    32000000000  30000000000

日付付きファイル名での保存

wmic logicaldisk get name,size,freespace > drives_%date:~0,4%%date:~5,2%%date:~8,2%.txt

(例:drives_20241225.txt)

応用例2:USBメモリの自動検出バッチファイル

説明:USBメモリが接続されているかを自動チェックするバッチファイル

基本的なUSB検出バッチ

@echo off
echo USBドライブをチェック中...
wmic logicaldisk where drivetype=2 get name /format:list | find "Name=" > nul
if %errorlevel%==0 (
    echo USBドライブが見つかりました:
    wmic logicaldisk where drivetype=2 get name
) else (
    echo USBドライブは接続されていません
)
pause

高機能USB検出バッチ

@echo off
setlocal enabledelayedexpansion

echo ====== USBドライブ検出ツール ======
echo.

rem USBドライブの一覧を取得
for /f "skip=1 tokens=*" %%i in ('wmic logicaldisk where drivetype^=2 get name /format:table') do (
    set drive=%%i
    if "!drive!" neq "" (
        set drive=!drive: =!
        if "!drive!" neq "" (
            echo 発見: !drive!
            
            rem ドライブの詳細情報を表示
            for /f "skip=1 tokens=2" %%j in ('wmic logicaldisk where name^="!drive!" get size /format:table') do (
                set size=%%j
                if "!size!" neq "" (
                    set /a sizeGB=!size!/1073741824
                    echo   容量: !sizeGB! GB
                )
            )
            
            rem 空き容量を表示
            for /f "skip=1 tokens=2" %%k in ('wmic logicaldisk where name^="!drive!" get freespace /format:table') do (
                set free=%%k
                if "!free!" neq "" (
                    set /a freeGB=!free!/1073741824
                    echo   空き容量: !freeGB! GB
                )
            )
            echo.
        )
    )
)

echo チェック完了
pause

応用例3:ドライブ容量監視バッチファイル

説明:各ドライブの容量をチェックして、空き容量が少ない場合に警告

容量監視バッチ

@echo off
setlocal enabledelayedexpansion

echo ====== ドライブ容量監視 ======
echo.

rem 警告する空き容量の閾値(GB)
set /a WARNING_THRESHOLD=10

for /f "skip=1 tokens=1,2,3" %%a in ('wmic logicaldisk get name^,size^,freespace /format:csv ^| find ","') do (
    set freespace=%%b
    set name=%%c
    set size=%%d
    
    if "!name!" neq "" if "!freespace!" neq "" (
        set /a freespaceGB=!freespace!/1073741824
        set /a sizeGB=!size!/1073741824
        set /a usedGB=!sizeGB!-!freespaceGB!
        
        echo ドライブ !name!
        echo   総容量: !sizeGB! GB
        echo   使用容量: !usedGB! GB
        echo   空き容量: !freespaceGB! GB
        
        if !freespaceGB! lss %WARNING_THRESHOLD% (
            echo   ★警告: 空き容量が不足しています!
        )
        echo.
    )
)

pause

応用例4:ネットワークドライブの状態確認

説明:ネットワークドライブが正常に接続されているかを確認

ネットワークドライブチェック

@echo off
echo ====== ネットワークドライブ状態確認 ======
echo.

rem ネットワークドライブ(DriveType=4)をチェック
wmic logicaldisk where drivetype=4 get name,providername /format:list | find "=" > temp_net.txt

if exist temp_net.txt (
    for /f "tokens=1,2 delims==" %%a in (temp_net.txt) do (
        if "%%a"=="Name" echo ドライブ: %%b
        if "%%a"=="ProviderName" echo 接続先: %%b & echo.
    )
    del temp_net.txt
) else (
    echo ネットワークドライブは接続されていません
)

pause

応用例5:定期的なドライブ情報ログ作成

説明:システム管理用に定期的にドライブ情報を記録

ログ作成バッチ

@echo off
setlocal

rem ログファイルのパス
set LOGFILE=C:\Logs\drive_status.log

rem ログディレクトリが存在しない場合は作成
if not exist C:\Logs mkdir C:\Logs

rem 現在の日時を取得
for /f "tokens=1,2,3,4 delims=/ " %%a in ('date /t') do (
    set DATE=%%a%%b%%c
)
for /f "tokens=1,2 delims=: " %%a in ('time /t') do (
    set TIME=%%a:%%b
)

rem ログファイルに出力
echo ==================== >> %LOGFILE%
echo ドライブ状態ログ >> %LOGFILE%
echo 日時: %DATE% %TIME% >> %LOGFILE%
echo ==================== >> %LOGFILE%

wmic logicaldisk get name,drivetype,size,freespace /format:csv >> %LOGFILE%

echo. >> %LOGFILE%
echo ログ作成完了: %LOGFILE%

タスクスケジューラでの自動実行設定

  1. 「タスクスケジューラ」を開く
  2. 「基本タスクの作成」を選択
  3. 名前:「ドライブ監視」
  4. トリガー:「毎日」など
  5. 操作:上記バッチファイルを指定

応用例6:PowerShellでの高度な分析

説明:PowerShellを使用してより詳細な分析を実行

詳細分析スクリプト

# ドライブ情報の詳細分析
$drives = Get-PSDrive -PSProvider FileSystem

Write-Host "====== ドライブ詳細分析レポート ======" -ForegroundColor Green
Write-Host "実行日時: $(Get-Date)" -ForegroundColor Gray
Write-Host ""

foreach ($drive in $drives) {
    $totalSize = ($drive.Used + $drive.Free) / 1GB
    $usedSize = $drive.Used / 1GB
    $freeSize = $drive.Free / 1GB
    $usagePercent = [math]::Round(($usedSize / $totalSize) * 100, 2)
    
    Write-Host "ドライブ $($drive.Name):" -ForegroundColor Yellow
    Write-Host "  総容量: $([math]::Round($totalSize, 2)) GB"
    Write-Host "  使用量: $([math]::Round($usedSize, 2)) GB ($usagePercent%)"
    Write-Host "  空き容量: $([math]::Round($freeSize, 2)) GB"
    
    # 使用率による警告
    if ($usagePercent -gt 90) {
        Write-Host "  ⚠️  警告: 使用率が90%を超えています!" -ForegroundColor Red
    } elseif ($usagePercent -gt 80) {
        Write-Host "  ⚠️  注意: 使用率が80%を超えています" -ForegroundColor Yellow
    } else {
        Write-Host "  ✅ 正常" -ForegroundColor Green
    }
    Write-Host ""
}

# CSV形式でレポート保存
$drives | Select-Object Name, 
    @{Name="TotalSize(GB)"; Expression={[math]::Round(($_.Used + $_.Free) / 1GB, 2)}},
    @{Name="UsedSize(GB)"; Expression={[math]::Round($_.Used / 1GB, 2)}},
    @{Name="FreeSize(GB)"; Expression={[math]::Round($_.Free / 1GB, 2)}},
    @{Name="UsagePercent"; Expression={[math]::Round(($_.Used / ($_.Used + $_.Free)) * 100, 2)}} |
    Export-Csv -Path "drive_report_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

Write-Host "レポートを保存しました: drive_report_$(Get-Date -Format 'yyyyMMdd').csv" -ForegroundColor Green

これらの応用例を参考に、自分の環境に合わせたドライブ管理ツールを作成してみてください。

システム管理での実践活用

サーバー管理での活用

複数サーバーの一括確認

リモートサーバーのドライブ情報取得

# 複数サーバーのドライブ情報を一括取得
$servers = @("Server1", "Server2", "Server3")

foreach ($server in $servers) {
    Write-Host "=== $server ===" -ForegroundColor Green
    try {
        Invoke-Command -ComputerName $server -ScriptBlock {
            Get-PSDrive -PSProvider FileSystem | Select-Object Name, 
                @{Name="Size(GB)"; Expression={[math]::Round(($_.Used + $_.Free) / 1GB, 2)}},
                @{Name="Free(GB)"; Expression={[math]::Round($_.Free / 1GB, 2)}}
        }
    }
    catch {
        Write-Host "接続エラー: $_" -ForegroundColor Red
    }
    Write-Host ""
}

データバックアップでの活用

バックアップ先ドライブの容量確認

@echo off
setlocal enabledelayedexpansion

rem バックアップ先ドライブを設定
set BACKUP_DRIVE=E:

echo バックアップ先ドライブ %BACKUP_DRIVE% の容量をチェック中...

rem ドライブの存在確認
wmic logicaldisk where name="%BACKUP_DRIVE%" get freespace /format:list | find "FreeSpace=" > temp.txt

if exist temp.txt (
    for /f "tokens=2 delims==" %%a in (temp.txt) do (
        set freespace=%%a
    )
    del temp.txt
    
    rem GB単位に変換
    set /a freespaceGB=!freespace!/1073741824
    
    echo 空き容量: !freespaceGB! GB
    
    rem 最低必要容量をチェック(例:50GB)
    if !freespaceGB! lss 50 (
        echo 警告: バックアップに必要な容量が不足しています
        echo 最低50GB必要ですが、現在!freespaceGB!GBしかありません
        pause
        exit /b 1
    ) else (
        echo バックアップ開始可能です
        rem ここにバックアップ処理を記述
    )
) else (
    echo エラー: バックアップドライブ %BACKUP_DRIVE% が見つかりません
    pause
    exit /b 1
)

USBメモリの安全な取り外し確認

USBメモリ使用中チェック

# USBメモリが使用中かどうかチェック
function Test-DriveInUse {
    param([string]$DriveLetter)
    
    $processes = Get-Process | Where-Object {
        $_.Path -and $_.Path.StartsWith($DriveLetter)
    }
    
    if ($processes) {
        Write-Host "警告: ドライブ $DriveLetter は以下のプロセスで使用中です:" -ForegroundColor Red
        $processes | Select-Object ProcessName, Path | Format-Table
        return $true
    } else {
        Write-Host "ドライブ $DriveLetter は使用されていません。安全に取り外せます。" -ForegroundColor Green
        return $false
    }
}

# 使用例
$usbDrives = Get-PSDrive -PSProvider FileSystem | Where-Object {
    $drive = Get-WmiObject -Class Win32_LogicalDisk | Where-Object {$_.DeviceID -eq "$($_.Name):"}
    $drive.DriveType -eq 2
}

foreach ($usb in $usbDrives) {
    Test-DriveInUse -DriveLetter "$($usb.Name):"
}

システム監視での活用

監視アラート設定

# ドライブ容量監視とメール通知
function Send-DriveAlert {
    param(
        [string]$DriveName,
        [double]$UsagePercent,
        [string]$SmtpServer,
        [string]$From,
        [string]$To
    )
    
    $subject = "ドライブ容量警告: $DriveName"
    $body = "ドライブ $DriveName の使用率が $UsagePercent% に達しました。"
    
    Send-MailMessage -SmtpServer $SmtpServer -From $From -To $To -Subject $subject -Body $body
}

# 監視実行
$alertThreshold = 85  # 85%でアラート

Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    $totalSize = $_.Used + $_.Free
    $usagePercent = [math]::Round(($_.Used / $totalSize) * 100, 2)
    
    if ($usagePercent -gt $alertThreshold) {
        Write-Host "アラート: ドライブ $($_.Name) 使用率 $usagePercent%" -ForegroundColor Red
        
        # メール通知(設定が必要)
        # Send-DriveAlert -DriveName $_.Name -UsagePercent $usagePercent -SmtpServer "smtp.example.com" -From "admin@example.com" -To "alert@example.com"
    }
}

ログ管理と分析

ドライブ使用履歴の追跡

# ドライブ使用状況の履歴管理
$logPath = "C:\Logs\DriveHistory.csv"

# CSVヘッダーが存在しない場合は作成
if (!(Test-Path $logPath)) {
    "DateTime,DriveName,TotalSize,UsedSize,FreeSize,UsagePercent" | Out-File $logPath -Encoding UTF8
}

# 現在のドライブ情報を記録
Get-PSDrive -PSProvider FileSystem | ForEach-Object {
    $totalSize = [math]::Round(($_.Used + $_.Free) / 1GB, 2)
    $usedSize = [math]::Round($_.Used / 1GB, 2)
    $freeSize = [math]::Round($_.Free / 1GB, 2)
    $usagePercent = [math]::Round(($_.Used / ($_.Used + $_.Free)) * 100, 2)
    
    $logEntry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'),$($_.Name),$totalSize,$usedSize,$freeSize,$usagePercent"
    $logEntry | Out-File $logPath -Append -Encoding UTF8
}

Write-Host "ドライブ情報をログに記録しました: $logPath"

履歴データの分析

# ドライブ使用傾向の分析
$csvData = Import-Csv "C:\Logs\DriveHistory.csv"

# ドライブごとの使用率推移を表示
$drives = $csvData | Group-Object DriveName

foreach ($drive in $drives) {
    Write-Host "=== ドライブ $($drive.Name) の使用率推移 ===" -ForegroundColor Yellow
    
    $latest = $drive.Group | Sort-Object DateTime | Select-Object -Last 5
    $latest | Select-Object DateTime, UsagePercent | Format-Table
    
    # 使用率の増加傾向をチェック
    if ($latest.Count -ge 2) {
        $oldUsage = [double]$latest[0].UsagePercent
        $newUsage = [double]$latest[-1].UsagePercent
        $trend = $newUsage - $oldUsage
        
        if ($trend -gt 5) {
            Write-Host "⚠️ 注意: 使用率が急増しています (+$([math]::Round($trend, 2))%)" -ForegroundColor Red
        }
    }
    Write-Host ""
}

トラブルシューティングと高度な設定

よくある問題と解決方法

問題1 :「wmic」コマンドが動作しない

症状

'wmic' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

原因と解決方法

  • Windows 11の一部環境でwmicが削除されている
  • 代替手段としてPowerShellを使用:
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object DeviceID, DriveType, Size, FreeSpace

問題2:管理者権限が取得できない

症状:fsutilコマンドで「アクセスが拒否されました」

解決方法

  1. スタートメニューで「cmd」と入力
  2. 「コマンドプロンプト」を右クリック
  3. 「管理者として実行」を選択
  4. UACダイアログで「はい」をクリック

問題3:PowerShellの実行ポリシーエラー

症状

このシステムではスクリプトの実行が無効になっているため、
ファイル **.ps1 を読み込むことができません

解決方法

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

環境別の最適化設定

古いWindows環境(Windows 7/8)

@echo off
rem 互換性を重視した方法
echo ドライブ一覧:
for %%d in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
    if exist %%d:\ echo %%d:
)

最新Windows環境(Windows 10/11)

# 最新機能を活用
Get-Volume | Where-Object {$_.DriveLetter} | 
    Select-Object DriveLetter, FileSystemLabel, Size, SizeRemaining |
    Format-Table -AutoSize

企業環境での設定

# セキュリティとログを重視
$scriptBlock = {
    $drives = Get-PSDrive -PSProvider FileSystem
    $result = @()
    
    foreach ($drive in $drives) {
        $result += [PSCustomObject]@{
            Computer = $env:COMPUTERNAME
            DriveLetter = $drive.Name
            TotalSizeGB = [math]::Round(($drive.Used + $drive.Free) / 1GB, 2)
            FreeSpaceGB = [math]::Round($drive.Free / 1GB, 2)
            Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        }
    }
    return $result
}

# ローカル実行
$result = & $scriptBlock

# 結果をCSV形式で保存(監査ログとして)
$result | Export-Csv -Path "DriveAudit_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

自動化とスケジューリング

Windowsタスクスケジューラーでの自動実行

バッチファイルの例

@echo off
rem 毎日実行するドライブチェック
setlocal

rem ログディレクトリ作成
if not exist "C:\DriveMonitor" mkdir "C:\DriveMonitor"

rem 実行ログ
echo %date% %time% - ドライブ監視開始 >> "C:\DriveMonitor\monitor.log"

rem ドライブ情報取得
powershell -Command "Get-PSDrive -PSProvider FileSystem | Export-Csv -Path 'C:\DriveMonitor\drives_%date:~0,4%%date:~5,2%%date:~8,2%.csv' -NoTypeInformation"

rem 容量警告チェック
powershell -Command "Get-PSDrive -PSProvider FileSystem | Where-Object {($_.Used/($_.Used+$_.Free))*100 -gt 80} | ForEach-Object {Write-Output \"警告: ドライブ $($_.Name) 使用率が80%を超えています\"}" >> "C:\DriveMonitor\alerts.log"

echo %date% %time% - ドライブ監視完了 >> "C:\DriveMonitor\monitor.log"

タスクスケジューラー設定手順

  1. taskschd.mscを実行
  2. 「基本タスクの作成」を選択
  3. 名前:「ドライブ監視」
  4. トリガー:「毎日」午前9時
  5. 操作:上記バッチファイルを指定

ネットワーク環境での活用

リモートマシンのドライブ情報取得

# 複数のリモートコンピューターの情報を並列取得
$computers = @("PC001", "PC002", "PC003")

$jobs = foreach ($computer in $computers) {
    Start-Job -Name "DriveCheck_$computer" -ScriptBlock {
        param($ComputerName)
        
        try {
            $drives = Get-CimInstance -ClassName Win32_LogicalDisk -ComputerName $ComputerName
            
            foreach ($drive in $drives) {
                [PSCustomObject]@{
                    Computer = $ComputerName
                    Drive = $drive.DeviceID
                    TotalSizeGB = [math]::Round($drive.Size / 1GB, 2)
                    FreeSpaceGB = [math]::Round($drive.FreeSpace / 1GB, 2)
                    DriveType = switch ($drive.DriveType) {
                        2 { "Removable" }
                        3 { "Local Disk" }
                        4 { "Network" }
                        5 { "CD-ROM" }
                        default { "Unknown" }
                    }
                    Status = "Success"
                }
            }
        }
        catch {
            [PSCustomObject]@{
                Computer = $ComputerName
                Status = "Error: $($_.Exception.Message)"
            }
        }
    } -ArgumentList $computer
}

# 結果を待機して表示
$results = $jobs | Wait-Job | Receive-Job
$jobs | Remove-Job

# 結果の表示
$results | Format-Table -AutoSize

まとめ:コマンドライン駆動でシステム管理をレベルアップ

重要なポイントをおさらい

基本的なコマンド

  • wmicwmic logicaldisk get name(シンプル、広く対応)
  • fsutilfsutil fsinfo drives(詳細情報、管理者権限必要)
  • PowerShellGet-PSDrive -PSProvider FileSystem(高機能、将来性高)

コマンドの使い分け

  • 簡単な確認:wmicまたはPowerShell
  • 詳細な管理:fsutilまたはPowerShell
  • 自動化処理:PowerShell推奨
  • 古い環境:wmicまたはdir

実践的な活用場面

  • USBメモリの検出:自動バックアップシステム
  • 容量監視:アラート機能付きシステム
  • ログ管理:履歴追跡と傾向分析
  • リモート管理:複数マシンの一括監視

セキュリティと注意点

セキュリティ考慮事項

  • 管理者権限での実行は必要最小限に
  • ネットワーク経由の情報取得時は認証を確実に
  • ログファイルの保護と定期的なクリーンアップ

運用上の注意点

  • 自動実行スクリプトは十分なテストを実施
  • エラーハンドリングを必ず組み込む
  • 重要システムでの実行前は必ずバックアップ

コメント

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