Detecte as partições GPT e MBR com PowerShell
-
27-09-2019 - |
Pergunta
Existe uma maneira de saber se um disco tem uma partição GPT ou MBR com PowerShell?
Solução
Usando WMI
gwmi -query "Select * from Win32_DiskPartition WHERE Index = 0" | Select-Object DiskIndex, @{Name="GPT";Expression={$_.Type.StartsWith("GPT")}}
Usando diskpart
$a = "list disk" | diskpart
$m = [String]::Join("`n", $a) | Select-String -Pattern "Disk (\d+).{43}(.)" -AllMatches
$m.Matches | Select-Object @{Name="DiskIndex";Expression={$_.Groups[1].Value}}, @{Name="GPT";Expression={$_.Groups[2].Value -eq "*"}}
Outras dicas
Se você estiver no Windows 8, Windows Server 2012 ou mais recente, poderá usar um dos cmdlets de armazenamento para verificar isso:
Get-Disk
A saída deste comando será formatada como:
PS C:\> Get-Disk
Number Friendly Name OperationalStatus Total Size Partition Style
------ ------------- ----------------- ---------- ---------------
0 Microsoft Virtual Disk Online 42 GB GPT
1 Microsoft Virtual Disk Online 1 GB GPT
2 Microsoft Virtual Disk Offline 2 GB RAW
3 Microsoft Virtual Disk Offline 3 GB RAW
Observe que a coluna mais à direita indica o estilo de partição, que é a peça de dados que você está procurando.
Se você estiver no Windows 7, Windows Server 2008 R2 ou mais antigo, use o DiskPart ou o WMI para obter essas informações. Eu prefiro usar o DiskPart. Modelo
diskpart
Seguido por
list disk
A saída será:
PS C:\> diskpart
Microsoft DiskPart version 6.3.9600
Copyright (C) 1999-2013 Microsoft Corporation.
On computer: WIN-BN8G3VMNQ9T
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 42 GB 0 B *
Disk 1 Online 1024 MB 991 MB *
Disk 2 Offline 2048 MB 2048 MB
Disk 3 Offline 3072 MB 3072 MB
Observe que o disco 0 e 1 são os discos GPT e eles têm um asterisco na coluna apropriada.
Para descobrir se algum disco possui um MBR ou um GPT, isso é muito fácil. Iniciar o PowerShell. Execute .. DiskPart, pressione Enter, Run .. Listar disco, pressione Enter. Aqui está a saída do meu computador:
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 232 GB 1024 KB
Disk 1 Online 465 GB 1024 KB
Disk 2 Online 3820 MB 0 B
Você receberá uma entrada sim, Eu penso!, para Dyn ou GPT se o seu disco for dinâmico ou o tipo de tabela de partição é GPT, respectivamente. Procurei por algum tempo e o suficiente para meus propósitos. Para comparar a saída do script por Josh usando o WMI, aqui está a saída.
DiskIndex GPT
--------- ---
0 False
1 False
2 False
Não. PowerShell não possui comandos nativos internos para isso. Powershell, como o nome sugere, é uma concha. Ele vem com um bom conjunto de cmdlets úteis e genéricos, mas a especialização como essa é deixada para comandos nativos externos (como DiskPart), módulos e/ou snapins.
Como você sempre encontrará o DiskPart.exe onde encontrar PowerShell, use isso.
Se você pretende usar o PowerShell sozinho, talvez o WMI possa ajudar. Dê uma olhada na saída de:
PS> gwmi win32_partition | % { $_ | fl * }
-Oisin