Обнаружение разделов 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 серверов и вывод в один файл? Как имя сервера, метка диска и стиль раздела?

Другие вопросы по тегам