Обнаружение разделов GPT и MBR с помощью Powershell
Есть ли способ узнать, имеет ли диск GPT или раздел MBR с powershell?
5 ответов
Использование WMI
gwmi -query "Select * from Win32_DiskPartition WHERE Index = 0" | Select-Object DiskIndex, @{Name="GPT";Expression={$_.Type.StartsWith("GPT")}}
Использование 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 "*"}}
Если вы используете Windows 8, Windows Server 2012 или новее, вы можете использовать один из командлетов хранилища, чтобы проверить это:
Get-Disk
Выходные данные этой команды будут отформатированы следующим образом:
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
Обратите внимание, что в крайнем правом столбце указан стиль раздела, который представляет собой фрагмент данных, который вы ищете.
Если вы используете Windows 7, Windows Server 2008 R2 или более раннюю версию, вам следует использовать diskpart или WMI для получения этой информации. Я предпочитаю использовать diskpart. Тип
diskpart
с последующим
list disk
Вывод будет выглядеть так:
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
Обратите внимание, что диски 0 и 1 являются GPT-дисками, и в соответствующем столбце у них есть звездочка.
Узнать, есть ли на диске MBR или GPT, очень легко. Запустите PowerShell. Запустите.. diskpart, нажмите ENTER, запустите.. список дисков, нажмите ENTER. Вот вывод моего компьютера:
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
Думаю, вы получите запись yes для Dyn или Gpt, если ваш диск динамический или тип таблицы разделов Gpt соответственно. Я искал в течение некоторого времени и достаточно для моих целей. Чтобы сравнить вывод сценария Джоша с использованием WMI, вот вывод:
DiskIndex GPT
--------- ---
0 False
1 False
2 False
Нет. PowerShell не имеет встроенных команд для этого. PowerShell, как следует из названия, является оболочкой. Он поставляется с хорошим набором полезных, общих командлетов, но специализация, подобная этой, оставлена для внешних собственных команд (таких как diskpart), модулей и / или оснасток.
Так как вы всегда будете искать diskpart.exe, где вы найдете powershell, используйте это.
Если вы собираетесь использовать PowerShell самостоятельно, возможно, WMI может помочь. Посмотрите на вывод:
PS> gwmi win32_partition | % { $_ | fl * }
-Oisin
как заставить эту работу на 120 серверов и вывод в один файл? Как имя сервера, метка диска и стиль раздела?