これを試してみてください。
$targetDisk
WMI を使用して、特定のドライブ インデックスのマウントされていないすべてのパーティションを取得する
- diskpart スクリプトを使用して、ターゲット ディスクで検出されたパーティションを次に使用可能なドライブ文字にマウントします。
メソッドを使用するGetRelated
ことは、何を関連付ける必要があるかを知ることです。探しているものを表す WMI クラスを知っておくと役立ちますWin32_DiskPartition
。Win32_DiskPartition
あなたの場合、論理ディスクに関連付けられていない(マウントされていない)パーティションを見つけたいので、関連付けられていないインスタンスを探しますWin32_LogicalDisk
。
特定の物理ディスク上のアンマウントされたボリュームのみが必要なため、さらにクラスを関連付ける必要があります。これを行うには、Win32_DiskPartition
の関連付けられWin32_DiskDrive
たインスタンスを取得する必要があります。
$targetDisk = 3
$unmounted = gwmi -class win32_DiskPartition | ? {
($_.GetRelated('Win32_LogicalDisk')).Count -eq 0
}
if ($unmounted) {
$commands = @()
$unmounted | ? { $_.GetRelated('Win32_DiskDrive') | ? { $_.Index -eq $targetDisk} } | % {
$commands += "select disk {0}" -f $_.DiskIndex
$commands += "select partition {0}" -f ($_.Index + 1)
$commands += "assign"
}
$tempFile = [io.path]::GetTempFileName()
$commands | out-file $tempFile -Encoding ASCII
$output = & diskpart.exe /s $tempFile 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Error $output
}
}