Попробуйте, это будет:
- Получить все несмонтированные разделы для заданного индекса диска
$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
}
}