Назад | Перейти на главную страницу

Как создать раздел EFI с помощью PowerShell?

Я хотел бы автоматизировать скрипт, создающий раздел EFI.

В настоящее время один шаг выполняется вручную и требует запуска DISKPART и выполнения следующих команд:

create partition efi size=100 
format fs=fat32 quick label=SYSTEM 
assign letter=S

Как я могу получить тот же результат с помощью PowerShell? Я не видел в командлете New-Partition опции для создания раздела EFI.

Я подозреваю, что это будет эквивалент в PowerShell:

New-Partition -DiskNumber 0 -Size 100MB -GptType "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}" -DriveLetter "S"
Format-Volume -FileSystem FAT32 -NewFileSystemLabel "SYSTEM" -DriveLetter "S" -Force

Внесите необходимые изменения в соответствии с вашим вариантом использования.

Обратите внимание, что вам необходимо выбрать диск, прежде чем вы сможете создать раздел.

Читать diskpart /?, используйте:

Microsoft DiskPart syntax:
        diskpart [/s <script>] [/?]

        /s <script> - Use a DiskPart script.
        /?          - Show this help screen.

Обратите внимание, что сценарий DiskPart простой текстовый файл, в который помещаются команды diskpart (по одной команде в строке), например MyDiskpart.txt перечислено ниже.

diskpart /s MyDiskpart.txt

Ответ: Последняя команда, которую вы можете запустить из повышенного powershell сеанс, а также с повышенного cmd сеанс («diskpart» всегда требует повышения прав).

Дополнение:

Более того, Diskpart принимает ввод от pipe ('|'), а также от < перенаправление так что следующие cmd команды эквивалентны:

diskpart /s MyDiskpart.txt
diskpart<MyDiskpart.txt
type MyDiskpart.txt|diskpart

Последние команды тестировались с использованием следующих сценарий diskpart:

==> type MyDiskpart.txt
list disk
list volume
select disk 1
list partition

Более того, вам не нужно создавать файл сценария diskpart; последующий .bat скрипт отображает сведения о системном томе (выбрав том # динамически):

@ECHO OFF
SETLOCAL EnableExtensions

:check_permissions
echo Administrative permissions required. Detecting permissions...
net session >nul 2>&1
if %errorLevel% == 0 (
    echo Success: Administrative permissions confirmed.
) else (
    echo Failure: Current permissions inadequate.
    goto :endlocal
)

:do_the_job
for /f "tokens=2" %%a in ('echo list volume ^| diskpart ^| findstr System') do (
    (
        echo select volume %%a
        echo detail volume
    ) | diskpart
)
echo DONE
:endlocal
pause