PowerShellでvCenter Datastore Clusterの不要ファイルを削除し、容量を確保する方法

vSphere環境を運用する際、Datastore Clusterには仮想マシンのスナップショット、不要なISOファイル、一時ファイル、ログファイルなどが蓄積されることがあります。これらの不要ファイルはストレージの圧迫を引き起こし、パフォーマンスの低下や新規仮想マシンのデプロイ制限などの問題を発生させる可能性があります。

手動でDatastoreの不要ファイルを整理することも可能ですが、大規模な環境では時間と手間がかかります。そこで、PowerShellの「PowerCLI」を活用すれば、vCenterに接続してDatastore内の不要ファイルを特定し、自動的に削除することが可能になります。

本記事では、PowerShellを使ってvCenterのDatastore Cluster内にある不要ファイルを削除し、ストレージ容量を確保する方法について、具体的なスクリプトや手順を交えて詳しく解説します。

目次

vCenterのDatastore Clusterとは


vCenterのDatastore Clusterは、複数のデータストアをグループ化し、ストレージ管理を効率化するための機能です。仮想マシンのストレージリソースを自動的に分散し、最適なパフォーマンスと容量管理を提供します。

Datastore Clusterの主な特徴


Datastore Clusterには、以下のような主要な特徴があります。

1. Storage DRS(Storage Distributed Resource Scheduler)


Storage DRSは、仮想マシンのストレージリソースを自動的に管理する機能です。ストレージの負荷分散を行い、過度なI/O負荷や容量不足を回避することができます。

2. ストレージ容量の最適化


Datastore Clusterを使用すると、データストア間の容量管理が容易になり、不要なファイルを削除することでストレージの最適化が可能になります。

3. 自動化による管理負担の軽減


Datastore Clusterは、Storage DRSと連携することで、仮想マシンのストレージ配置を自動的に調整し、管理者の負担を軽減します。

Datastore Clusterを適切に管理する重要性


Datastore Clusterを適切に管理しないと、以下のような問題が発生する可能性があります。

  • 不要ファイルの蓄積:スナップショットやISOファイル、ログファイルなどが溜まり、ストレージ容量が逼迫する。
  • ストレージのパフォーマンス低下:過剰なデータが原因で、I/O遅延が発生し、仮想マシンのパフォーマンスに影響を与える。
  • 管理の煩雑化:手動でのファイル管理が必要となり、運用負担が増加する。

PowerShellを活用することで、Datastore Cluster内の不要ファイルを効率的に特定し、自動で削除することが可能になります。次のセクションでは、不要ファイルが発生する主な原因について詳しく説明します。

不要ファイルが発生する原因


vCenterのDatastore Cluster内に不要なファイルが蓄積されると、ストレージの無駄遣いが発生し、仮想マシンのパフォーマンスにも悪影響を及ぼす可能性があります。ここでは、不要ファイルが発生する主な原因を解説します。

1. 古いスナップショットの放置


スナップショットは仮想マシンの状態を保存するための便利な機能ですが、長期間使用されずに残ったままになると、ストレージ容量を圧迫します。特に、大量のスナップショットが存在すると、ディスクI/Oにも影響を与える可能性があります。

解決策


定期的に不要なスナップショットを確認し、適切に削除することが推奨されます。

2. 使われていないISOイメージファイル


Datastore内には、仮想マシンのインストールや設定時に使用されたISOファイルが保管されることがあります。不要になったISOファイルを削除しないと、貴重なストレージスペースを占有する原因になります。

解決策


仮想マシンで利用されていないISOファイルを定期的にチェックし、不要なものを削除することが重要です。

3. 一時ファイルやログファイルの増加


仮想マシンの操作やvCenterの管理プロセスによって、一時ファイルやログファイルが生成されます。特に、エラーが多発するとログファイルのサイズが肥大化し、ストレージを圧迫する原因となります。

解決策


ログファイルのローテーション設定を見直し、古いログが適切に削除されるように設定することが必要です。

4. 一時的に作成されたが削除されていないディスクファイル


仮想マシンのクローン作成や移行プロセス中に一時ディスクファイル(*.vmdk)が生成されることがあります。これらのファイルが適切に削除されない場合、無駄なストレージ使用につながります。

解決策


未使用のVMDKファイルを定期的に確認し、不要なものを削除するスクリプトを実装すると効果的です。

5. 不要なスワップファイルやメモリダンプファイル


仮想マシンのメモリ管理のためにスワップファイルやメモリダンプファイルが作成されることがあります。これらのファイルは仮想マシンの停止後も残ることがあり、不要になったものを放置するとストレージの圧迫につながります。

解決策


仮想マシンをシャットダウンした際に、不要なスワップファイルを削除するように管理ポリシーを見直すことが推奨されます。

まとめ


Datastore Cluster内に不要ファイルが蓄積する主な原因は、スナップショットの放置、未使用のISOファイルやログファイルの増加、一時ディスクファイルの残存などが挙げられます。これらの不要ファイルを特定し、自動的に削除することで、ストレージの最適化を図ることが可能です。次のセクションでは、PowerCLIの概要とインストール方法について解説します。

PowerCLIの概要とインストール方法


PowerCLIは、VMware vSphere環境を管理するためのPowerShellモジュールであり、vCenterやESXiホストに対してさまざまな操作をスクリプトで実行できます。Datastoreの管理や不要ファイルの削除といったタスクを自動化するために非常に有用です。

PowerCLIとは


PowerCLIは、VMwareが提供するPowerShellベースの管理ツールであり、vSphere環境を効率的に制御できる機能を備えています。主な特徴は以下の通りです。

1. vSphere環境の自動管理


PowerCLIを使用すると、仮想マシンの作成、設定変更、スナップショット管理、データストアの操作などをスクリプトで実行できます。

2. 高度なフィルタリングとデータ取得


コマンドを活用することで、特定の条件に合致する仮想マシンやストレージの情報を取得し、不要なファイルの特定などに役立ちます。

3. バッチ処理やスケジュール実行が可能


タスクスケジューラと組み合わせることで、定期的なメンテナンスやファイルクリーンアップを自動実行できます。

PowerCLIのインストール方法


PowerCLIは、Windows環境にPowerShellを利用して簡単にインストールできます。

1. PowerShellのバージョン確認


まず、PowerShellのバージョンが適切であるか確認します。

$PSVersionTable.PSVersion

PowerCLIの最新バージョンを使用するためには、PowerShell 5.1以上が推奨されます。

2. PowerCLIのインストール


PowerShellを管理者権限で開き、以下のコマンドを実行します。

Install-Module -Name VMware.PowerCLI -Scope CurrentUser

初回インストール時は、リポジトリの信頼性を確認するためのプロンプトが表示される場合があります。その際は「Y」を入力して続行してください。

3. モジュールのインポート


インストールが完了したら、PowerCLIモジュールをPowerShellに読み込む必要があります。

Import-Module VMware.PowerCLI

この操作により、PowerCLIのコマンドが利用可能になります。

4. インストール確認


PowerCLIが正しくインストールされたかを確認するには、以下のコマンドを実行します。

Get-Module -Name VMware.PowerCLI -ListAvailable

PowerCLIのバージョン情報が表示されれば、インストールは成功しています。

PowerCLIの設定調整


PowerCLIを利用する際、デフォルトの設定ではサードパーティの証明書を許可しないため、以下の設定を変更することで、よりスムーズな運用が可能になります。

Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false
Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction Ignore -Confirm:$false

この設定により、未承認のSSL証明書エラーを無視し、VMwareのデータ収集プログラムへの参加を無効化できます。

まとめ


PowerCLIは、vSphere環境を効率的に管理するためのPowerShellモジュールであり、Datastore管理や不要ファイルの削除を自動化するのに非常に便利です。本セクションでは、PowerCLIの概要とインストール方法について説明しました。次のセクションでは、PowerCLIを使用してvCenterに接続する方法を解説します。

PowerShellでvCenterに接続する方法


PowerCLIを使用すると、PowerShellからvCenter Serverに接続し、Datastoreの管理や不要ファイルの削除などのタスクを実行できます。本セクションでは、PowerCLIを利用してvCenterに接続する方法を解説します。

1. vCenterへの接続前の準備


vCenterに接続する前に、以下の準備を行います。

1.1 PowerCLIのインストール確認


PowerCLIが正しくインストールされていることを確認するため、以下のコマンドを実行します。

Get-Module -Name VMware.PowerCLI -ListAvailable

PowerCLIがリストに表示されない場合は、前のセクションで解説した方法でインストールしてください。

1.2 セキュリティ設定の変更


初回のPowerCLI実行時、証明書の検証エラーが発生する可能性があるため、以下の設定を行うとスムーズに接続できます。

Set-PowerCLIConfiguration -Scope User -InvalidCertificateAction Ignore -Confirm:$false

この設定により、vCenterの自己署名証明書を無視し、接続時のエラーを回避できます。

2. vCenter Serverへの接続


次に、PowerCLIを使ってvCenterに接続します。

2.1 vCenterへのログイン


PowerShellを開き、以下のコマンドを実行します。

Connect-VIServer -Server <vCenterのホスト名またはIPアドレス> -User <ユーザー名> -Password <パスワード>

例:

Connect-VIServer -Server vcenter.example.com -User admin -Password VMware@123

このコマンドを実行すると、vCenter Serverにログインし、管理用のセッションが確立されます。

2.2 認証情報を安全に管理する方法


パスワードをコマンドラインに直接入力するのは推奨されません。セキュリティを強化するために、以下の方法を用いることができます。

方法1: SecureStringを使用する

$securePassword = Read-Host "Enter Password" -AsSecureString
$credential = New-Object System.Management.Automation.PSCredential ("admin", $securePassword)
Connect-VIServer -Server vcenter.example.com -Credential $credential

この方法では、パスワードが入力時にマスキングされ、セキュリティを向上させることができます。

2.3 接続状態の確認


接続が成功したかどうかを確認するには、以下のコマンドを実行します。

$global:DefaultVIServer

正常に接続されていれば、現在接続しているvCenter Serverの情報が表示されます。

3. vCenterからのログアウト


作業が完了したら、vCenterからログアウトすることを推奨します。以下のコマンドを実行してください。

Disconnect-VIServer -Confirm:$false

このコマンドを実行すると、現在のvCenterセッションが終了し、安全にログアウトできます。

まとめ


本セクションでは、PowerCLIを使ってvCenterに接続する方法を解説しました。PowerCLIのセキュリティ設定の調整、認証情報の安全な管理、接続状態の確認、そしてログアウトの方法までを網羅しました。次のセクションでは、Datastore内の不要ファイルを特定する方法について詳しく説明します。

Datastore内の不要ファイルを特定する方法


Datastore内には仮想マシンのスナップショット、ISOファイル、一時ファイル、ログファイルなどが蓄積されており、これらがストレージ容量を圧迫する原因となります。本セクションでは、PowerCLIを使用してDatastore内の不要ファイルを特定する方法を解説します。

1. Datastore内のファイル一覧を取得する


まず、Datastoreに格納されているすべてのファイルをリストアップするには、以下のPowerCLIコマンドを使用します。

$datastoreName = "<Datastore名>"
$datastore = Get-Datastore -Name $datastoreName
Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse

このコマンドは、指定したDatastoreの全ファイルを再帰的に取得します。

2. 不要ファイルのフィルタリング


Datastore内の不要なファイルを特定するために、以下のような条件でフィルタリングを行います。

2.1 未使用のISOファイルを特定する


ISOファイルは仮想マシンのインストール時に使用されますが、不要になったものが残っている場合があります。使用されていないISOファイルを特定するには、以下のコマンドを使用します。

Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.iso$" }

さらに、現在使用中のISOファイルを除外する場合は、以下のコマンドで仮想マシンの設定を確認し、使用中のISOファイルを取得します。

Get-VM | Get-CDDrive | Where-Object { $_.IsoPath -ne $null } | Select-Object Parent, IsoPath

不要なISOファイルは、このリストに含まれていないものとして判断できます。

2.2 古いスナップショットの検出


スナップショットが長期間放置されると、ストレージを圧迫する原因となります。以下のコマンドで、Datastoreに保存されているスナップショットの一覧を取得できます。

Get-VM | Get-Snapshot | Select-Object VM, Name, Created

作成から一定期間経過したスナップショットを特定する場合は、例えば30日以上経過したものを表示するようにフィルタリングできます。

$daysOld = 30
$cutoffDate = (Get-Date).AddDays(-$daysOld)

Get-VM | Get-Snapshot | Where-Object { $_.Created -lt $cutoffDate } | Select-Object VM, Name, Created

このリストに表示されたスナップショットは、削除を検討すべき対象となります。

2.3 大容量のログファイルを特定する


ログファイルはシステムや仮想マシンの運用中に自動生成されますが、不要なものが蓄積するとストレージを圧迫します。以下のコマンドで、特定のサイズ(例:100MB以上)のログファイルを検索できます。

Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.log$" -and $_.Length -gt 100MB }

このリストに含まれるファイルが不要であれば、削除することでストレージを確保できます。

2.4 孤立したVMDKファイルの特定


仮想マシンに関連付けられていないVMDKファイル(ディスクイメージ)がDatastore内に放置されることがあります。孤立したVMDKファイルを特定するには、以下の方法を使用します。

1. Datastore内の全VMDKファイルを取得

Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.vmdk$" }

2. 実際に使用されているVMDKファイルを取得

Get-VM | Get-HardDisk | Select-Object Parent, Filename

この結果と比較し、使用されていないVMDKファイルを特定することができます。

3. 不要ファイルのレポート出力


特定した不要ファイルの情報をレポートとして保存しておくと、後で確認する際に便利です。以下のスクリプトで、不要ファイルの一覧をCSVファイルにエクスポートできます。

$report = @()

$isoFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.iso$" }
$logFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.log$" -and $_.Length -gt 100MB }

foreach ($file in $isoFiles) {
    $report += [PSCustomObject]@{
        FileName = $file.Name
        Path = $file.FullName
        SizeMB = [math]::Round($file.Length / 1MB, 2)
        Type = "ISO"
    }
}

foreach ($file in $logFiles) {
    $report += [PSCustomObject]@{
        FileName = $file.Name
        Path = $file.FullName
        SizeMB = [math]::Round($file.Length / 1MB, 2)
        Type = "Log"
    }
}

$report | Export-Csv -Path "C:\Datastore_UnusedFiles_Report.csv" -NoTypeInformation

このスクリプトを実行すると、不要ファイルの一覧がCSVファイルに出力され、詳細な確認が可能になります。

まとめ


本セクションでは、PowerCLIを使用してDatastore内の不要ファイルを特定する方法を解説しました。ISOファイル、スナップショット、ログファイル、孤立したVMDKファイルを特定することで、ストレージの使用状況を可視化できます。次のセクションでは、特定した不要ファイルをPowerShellで安全に削除する方法を説明します。

PowerShellを使った不要ファイルの削除手順


Datastore内の不要ファイルを特定した後、それらを削除することでストレージ容量を確保できます。本セクションでは、PowerShell(PowerCLI)を使用して、特定した不要ファイルを安全に削除する手順を解説します。

1. 削除前の注意事項


ファイルを削除する前に、以下の点を確認してください。

1.1 バックアップの取得


誤って必要なファイルを削除しないよう、スナップショットやバックアップを事前に取得しておくことが推奨されます。

1.2 削除対象のファイルを再確認


削除するファイルが本当に不要であるかどうかをリスト化し、管理者や関係者と確認を行うことが望ましいです。

2. PowerCLIを使用した不要ファイルの削除


不要ファイルを削除するために、PowerCLIのRemove-Itemコマンドを活用します。

2.1 未使用のISOファイルを削除


以下のスクリプトを使用すると、Datastore内の不要なISOファイルを削除できます。

$datastoreName = "<Datastore名>"
$datastore = Get-Datastore -Name $datastoreName

# 未使用のISOファイルを取得
$isoFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.iso$" }

foreach ($file in $isoFiles) {
    Write-Host "Deleting: $($file.FullName)"
    Remove-Item -Path $file.FullName -Confirm:$false -Force
}

このスクリプトは、Datastore内のISOファイルを検索し、使用されていないものを削除します。

2.2 古いスナップショットの削除


スナップショットの削除は慎重に行う必要があります。以下のスクリプトを使用すると、30日以上経過したスナップショットを削除できます。

$daysOld = 30
$cutoffDate = (Get-Date).AddDays(-$daysOld)

$oldSnapshots = Get-VM | Get-Snapshot | Where-Object { $_.Created -lt $cutoffDate }

foreach ($snapshot in $oldSnapshots) {
    Write-Host "Removing snapshot: $($snapshot.Name) from VM: $($snapshot.VM)"
    Remove-Snapshot -Snapshot $snapshot -Confirm:$false
}

このスクリプトを実行すると、指定した期間(30日以上)経過したスナップショットが削除されます。

2.3 大容量のログファイルを削除


100MB以上のログファイルを削除する場合、以下のスクリプトを使用します。

$logFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.log$" -and $_.Length -gt 100MB }

foreach ($file in $logFiles) {
    Write-Host "Deleting log file: $($file.FullName)"
    Remove-Item -Path $file.FullName -Confirm:$false -Force
}

このスクリプトにより、不要なログファイルを削除してストレージを確保できます。

2.4 孤立したVMDKファイルを削除


仮想マシンに関連付けられていないVMDKファイルを削除する場合は、以下の手順を使用します。

$allVMDKFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.vmdk$" }
$usedVMDKFiles = Get-VM | Get-HardDisk | Select-Object -ExpandProperty Filename

foreach ($file in $allVMDKFiles) {
    if ($usedVMDKFiles -notcontains $file.FullName) {
        Write-Host "Deleting unused VMDK: $($file.FullName)"
        Remove-Item -Path $file.FullName -Confirm:$false -Force
    }
}

このスクリプトは、仮想マシンが使用していないVMDKファイルを特定し、自動的に削除します。

3. 削除処理の自動化


削除スクリプトを定期的に実行することで、Datastoreのクリーニングを自動化できます。Windowsのタスクスケジューラを利用してスクリプトを定期実行する設定方法については、次のセクションで解説します。

まとめ


本セクションでは、PowerCLIを使用してDatastore内の不要ファイル(ISOファイル、スナップショット、ログファイル、孤立したVMDKファイル)を削除する方法を紹介しました。不要ファイルの削除を定期的に実施することで、ストレージ容量を効率的に管理できます。次のセクションでは、これらのスクリプトをスケジュール実行する方法を解説します。

削除前に実施すべきバックアップと注意点


Datastore内の不要ファイルを削除する前に、誤って必要なファイルを消去しないように注意が必要です。本セクションでは、削除前に実施すべきバックアップ方法と、データ保護のためのポイントを解説します。

1. 削除前のバックアップの重要性


誤って削除したファイルは、特にDatastore内の仮想マシン関連のファイル(VMDK、スナップショット、ISOなど)である場合、復旧が難しくなる可能性があります。そのため、事前にバックアップを取得することが推奨されます。

1.1 事前にDatastoreのバックアップを取得


削除する前に、Datastoreのバックアップを取得する方法を検討します。以下の方法があります。

  • vSphere Replication:Datastore全体を別のストレージにレプリケーションする
  • Veeam Backup & Replicationなどのバックアップツールを使用
  • ESXiのvmkfstoolsコマンドを使用してVMDKファイルをコピー
  • Datastoreブラウザを使ってローカルPCや外部ストレージへバックアップ

バックアップを取得することで、誤って削除した場合でも復元が可能になります。

2. 削除対象のファイルを確認する


削除対象が本当に不要かどうかを事前に確認することで、誤削除を防ぐことができます。以下の手順で確認を行います。

2.1 Datastore内のファイルリストをエクスポート


削除する前に、対象のファイルをCSVにエクスポートし、関係者と確認を行います。

$datastoreName = "<Datastore名>"
$datastore = Get-Datastore -Name $datastoreName
$files = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Select-Object Name, FullName, Length

$files | Export-Csv -Path "C:\Datastore_Files.csv" -NoTypeInformation

このリストをもとに、不要ファイルであることを確定した上で削除を実行します。

2.2 仮想マシンで使用されているファイルを特定


以下のスクリプトを使用して、仮想マシンで使用されているISOファイル、スナップショット、VMDKファイルを特定します。

Get-VM | Get-CDDrive | Where-Object { $_.IsoPath -ne $null } | Select-Object Parent, IsoPath
Get-VM | Get-Snapshot | Select-Object VM, Name, Created
Get-VM | Get-HardDisk | Select-Object Parent, Filename

削除対象のファイルがこのリストに含まれていないことを確認してから削除を行います。

3. 削除テストを実施する


削除スクリプトを実行する前に、テストモードで動作確認を行い、安全性を確認します。

3.1 削除対象をシミュレーション


以下のように、Remove-Itemの代わりにWrite-Hostを使って、削除対象のみをリストアップします。

$isoFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.iso$" }

foreach ($file in $isoFiles) {
    Write-Host "Will delete: $($file.FullName)"
}

この方法で削除予定のファイルが正しいかを事前にチェックできます。

3.2 テスト環境で実際に削除してみる


本番環境で削除する前に、テスト環境で同様のスクリプトを実行し、意図した通りの動作をするかを確認します。

4. ログの取得と監査


ファイル削除後、削除したファイルの情報をログに記録しておくことで、万が一のトラブル時に対応しやすくなります。以下のスクリプトを使用すると、削除したファイルをログに記録できます。

$logFile = "C:\DeletedFiles_Log.txt"
$deletedFiles = @()

foreach ($file in $isoFiles) {
    Remove-Item -Path $file.FullName -Confirm:$false -Force
    $deletedFiles += [PSCustomObject]@{
        FileName = $file.Name
        Path = $file.FullName
        DeletedAt = Get-Date
    }
}

$deletedFiles | Export-Csv -Path $logFile -NoTypeInformation

このスクリプトを使用すると、削除されたファイルのリストがCSV形式で保存されます。

5. 削除後のストレージ確認


不要ファイルを削除した後、ストレージの空き容量が適切に増加したかを確認するために、以下のコマンドを実行します。

Get-Datastore -Name "<Datastore名>" | Select-Object Name, FreeSpaceGB, CapacityGB

削除前後のストレージ使用量を比較し、適切に削除が行われたかをチェックします。

まとめ


本セクションでは、Datastore内の不要ファイルを削除する前に実施すべきバックアップと確認手順について解説しました。削除前には、バックアップの取得、ファイルのリストアップ、テスト実施、削除ログの取得などを行うことで、安全にストレージのクリーンアップを実行できます。次のセクションでは、不要ファイル削除のスクリプトをスケジュール実行する方法を解説します。

スケジュール実行による自動化の方法


Datastoreの不要ファイルを定期的に削除することで、ストレージの管理を効率化できます。本セクションでは、PowerShellスクリプトをWindowsのタスクスケジューラに登録し、自動的に実行する方法を解説します。

1. 自動化のメリット


手動で不要ファイルを削除するのではなく、スクリプトをスケジュール実行することで、以下のメリットがあります。

  • ストレージ容量の最適化:不要なファイルが溜まる前に削除できる
  • 管理負担の軽減:手動作業を減らし、運用を効率化
  • 人的ミスの防止:削除のルールを統一し、誤削除を防ぐ

2. 自動実行用のスクリプト作成


以下のスクリプトは、Datastore内の不要なISOファイル、スナップショット、ログファイルを削除するものです。

# Datastore名を指定
$datastoreName = "<Datastore名>"
$datastore = Get-Datastore -Name $datastoreName
$logFile = "C:\DeletedFiles_Log.txt"
$deletedFiles = @()

# ISOファイルの削除
$isoFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.iso$" }
foreach ($file in $isoFiles) {
    Remove-Item -Path $file.FullName -Confirm:$false -Force
    $deletedFiles += [PSCustomObject]@{ FileName = $file.Name; Path = $file.FullName; DeletedAt = Get-Date }
}

# 30日以上前のスナップショットの削除
$daysOld = 30
$cutoffDate = (Get-Date).AddDays(-$daysOld)
$oldSnapshots = Get-VM | Get-Snapshot | Where-Object { $_.Created -lt $cutoffDate }
foreach ($snapshot in $oldSnapshots) {
    Remove-Snapshot -Snapshot $snapshot -Confirm:$false
    $deletedFiles += [PSCustomObject]@{ FileName = $snapshot.Name; Path = "VM: $($snapshot.VM)"; DeletedAt = Get-Date }
}

# 100MB以上のログファイルを削除
$logFiles = Get-ChildItem -Path "vmstore:\$($datastore.Name)" -Recurse | Where-Object { $_.Name -match "\.log$" -and $_.Length -gt 100MB }
foreach ($file in $logFiles) {
    Remove-Item -Path $file.FullName -Confirm:$false -Force
    $deletedFiles += [PSCustomObject]@{ FileName = $file.Name; Path = $file.FullName; DeletedAt = Get-Date }
}

# 削除ログを保存
$deletedFiles | Export-Csv -Path $logFile -NoTypeInformation

このスクリプトをC:\Scripts\Cleanup_Datastore.ps1として保存します。

3. Windowsタスクスケジューラに登録


次に、このスクリプトを定期的に実行するために、Windowsのタスクスケジューラを設定します。

3.1 タスクスケジューラを開く

  1. Windowsの検索バーで「タスクスケジューラ」と入力し、開きます。
  2. 「基本タスクの作成」をクリックします。

3.2 基本タスクの設定

  1. 名前: 「Datastore Cleanup」
  2. 説明: 「Datastoreの不要ファイルを定期削除するスクリプト」
  3. トリガー(実行タイミング): 「毎週」または「毎日」
  4. 時間: 業務時間外(例:深夜2:00)

3.3 実行プログラムの指定

  1. 「操作」で「プログラムの開始」を選択
  2. プログラム/スクリプトに以下を入力:
   powershell.exe
  1. 引数の追加に以下を入力:
   -ExecutionPolicy Bypass -File "C:\Scripts\Cleanup_Datastore.ps1"
  1. 「完了」をクリックしてタスクを保存

4. 実行結果の確認


スクリプトが正常に実行されたかどうかは、タスクスケジューラの履歴や、作成されたログファイル(C:\DeletedFiles_Log.txt)で確認できます。

以下のコマンドを実行して、ログの内容を確認します。

Import-Csv "C:\DeletedFiles_Log.txt" | Format-Table -AutoSize

5. トラブルシューティング


タスクが正常に動作しない場合、以下を確認してください。

  • PowerCLIの実行ポリシーが制限されている場合
  Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  • スクリプトのパスに誤りがある場合
    C:\Scripts\Cleanup_Datastore.ps1 が正しいか確認
  • タスクスケジューラの権限不足
    「管理者として実行」にチェックを入れる

まとめ


本セクションでは、PowerShellスクリプトをタスクスケジューラに登録し、Datastore内の不要ファイルを定期的に削除する方法を解説しました。自動化することで、手作業による削除の負担を減らし、ストレージの管理を効率化できます。次のセクションでは、本記事のまとめを行います。

まとめ


本記事では、PowerShellを活用してvCenterのDatastore Cluster内にある不要ファイルを削除し、ストレージ容量を確保する方法について解説しました。

まず、Datastore Clusterの仕組みと不要ファイルが発生する原因を説明し、PowerCLIを用いたvCenterへの接続方法を紹介しました。その後、不要ファイルの特定方法として、ISOファイル、スナップショット、ログファイル、孤立したVMDKファイルの検索手順を詳しく説明しました。

さらに、PowerShellを使用して不要ファイルを安全に削除する方法や、削除前に実施すべきバックアップや確認事項についても解説しました。最後に、削除処理をWindowsのタスクスケジューラに登録し、自動実行することでストレージ管理を効率化する手順を紹介しました。

PowerShellを活用したDatastoreのクリーンアップは、手作業の削減だけでなく、ストレージリソースの最適化にも貢献します。定期的にメンテナンスを行い、仮想環境のパフォーマンスを維持しましょう。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次