Дайте этому попытку, это будет:
- Получить все несмонтированные разделы для данного индекса диска
$targetDisk
с помощью WMI
- Mount обнаруженных разделы на целевой диск на следующую свободную букву диска, используя DiskPart скрипт.
Использование метода GetRelated
предназначено для того, чтобы узнать, что вам нужно с этим делать. Это помогает узнать, что класс WMI представляет то, что вы ищете Win32_DiskPartition
. В вашем случае вы хотите найти разделы, которые не связаны с логическим диском (unmounted), поэтому мы ищем экземпляры 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
}
}
[Переполнение стека не форум] (http://meta.stackexchange.com/a/92115). Я думаю, что лучше дать свой собственный полный ответ и подтвердить другой ответ в комментариях. –