Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Узнать, MBR или GPT?

Ответить
Настройки темы
CMD/BAT - [решено] Узнать, MBR или GPT?

Аватара для m0nkrus

Старожил


Сообщения: 148
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Нужно получить данные, какой формат имеет диск С, MBR или GPT и исходя из этой инфы задать флаговую переменную как 0 или 1.

Отправлено: 19:10, 24-04-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата m0nkrus:
Iska, ну я же сказал, что на WSH мне не пойдет... »
читать дальше »
— Рэбе, куры сдохли…
— Ну, вот, а у меня ещё столько плодотворных идей было
А я Вам PoSH приготовил:
Код: Выделить весь код
$sComputerName = "."

Get-WmiObject -ComputerName $sComputerName -Query "ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='$((Get-WmiObject -ComputerName $sComputerName -Query "SELECT * FROM Win32_LogicalDisk WHERE DeviceID = '$((Get-WmiObject -ComputerName $sComputerName -Query "SELECT * FROM Win32_OperatingSystem").SystemDrive)'").DeviceID)'} WHERE ResultClass = Win32_DiskPartition" |`
    Select-Object DiskIndex, @{Name="GPT";Expression={$_.Type.StartsWith("GPT")}}

Если серьёзно — я не видел последующей правки:
Цитата m0nkrus:
Iska, мне нужно эту выборку задействовать в SetupComplete.cmd автоустановки семерки. Так что CMD и только CMD. »
На этом этапе WSH не доступен? Или Wbem не работает?

Отправлено: 11:51, 25-04-2013 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


(*.*)


Сообщения: 36553
Благодарности: 6693

Профиль | Сайт | Отправить PM | Цитировать


powershell.exe можно вызвать из SetupComplete

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:17, 25-04-2013 | #12


Аватара для m0nkrus

Старожил


Сообщения: 148
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
На этом этапе WSH не доступен? Или Wbem не работает? »
Вот чего не знаю, того не знаю. Но даже если работает, как из PowerShell передать обратно в CMD результат отработки вашего скрипта? Через вывод результатов во внешний файл?

Отправлено: 15:02, 25-04-2013 | #13


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата m0nkrus:
как из PowerShell передать обратно в CMD результат отработки вашего скрипта? »
Код: Выделить весь код
$sComputerName = "."

If((Get-WmiObject -ComputerName $sComputerName -Query "ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='$((Get-WmiObject -ComputerName $sComputerName -Query "SELECT * FROM Win32_LogicalDisk WHERE DeviceID = '$((Get-WmiObject -ComputerName $sComputerName -Query "SELECT * FROM Win32_OperatingSystem").SystemDrive)'").DeviceID)'} WHERE ResultClass = Win32_DiskPartition").Type.StartsWith("GPT")) {
    Exit 0
} Else {
    Exit 1
}
(или «Return»; что правильнее — не знаю).
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

.\БезИмени1.ps1

if %errorlevel% equ 0 (
	echo GPT
) else (
	echo Not GPT
)

endlocal
exit /b 0
P.S. Для верности, конечно, корректнее будет брать не 0 и 1, а какие-либо большие величины, заведомо превышающие те, которые может возвращать сам powershell.exe (например, в случае ошибок).
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 25-04-2013 | #14


Аватара для m0nkrus

Старожил


Сообщения: 148
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Iska, спасибо, потестирую.

Отправлено: 15:29, 25-04-2013 | #15


Аватара для m0nkrus

Старожил


Сообщения: 148
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Iska, так, что-то я уперся...

Я так понимаю, в прошлом вашем посте первое - это скрипт для PowerShell, который должен быть помещен в файл БезИмени1.ps1, так? Второе - cmd-файл, который и обращается к скрипту PowerShell и получает от него результат, так?

Так вот, не работает. Если оставить расширение ps1, то cmd-шник просто открывает ps1 блокнотом. А если расширение заменить на пауэршелловское psc1, то cmd просто вылетает на этой команде. Тот же эффект при замене строки .\БезИмени1.ps1 на PowerShell -PSConsoleFile БезИмени1.psс1

Что я делаю не так?


У меня, между тем, разработка скрипта на основе diskpart вышла на финишную прямую. Вот до чего я дошел:
Код: Выделить весь код
CD /d %~dp0
ECHO LIST DISK | DISKPART | FINDSTR /r /c:"\*$" > disks.txt
FOR /f "tokens=2" %%i IN (disks.txt) DO ECHO select disk %%i >> diskpart.txt && ECHO detail disk >> diskpart.txt
DISKPART /s diskpart.txt | FINDSTR /e "Boot Загрузоч"
IF ERRORLEVEL 1 (
    ECHO Загрузочный том размещен на MBR-разделе
) ELSE (
    ECHO Загрузочный том размещен на GPT-разделе
)
Что скажете? Хорошо бы оптимизировать.

Последний раз редактировалось m0nkrus, 27-04-2013 в 23:07.


Отправлено: 20:58, 25-04-2013 | #16


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата m0nkrus:
Так вот, не работает. Если оставить расширение ps1, то cmd-шник просто открывает ps1 блокнотом. А если расширение заменить на пауэршелловское psc1, то cmd просто вылетает на этой команде. Тот же эффект при замене строки .\БезИмени1.ps1 на PowerShell -PSConsoleFile БезИмени1.psс1
Что я делаю не так? »
Что-то с безопасностью. Вообще — хоть какие-либо скрипты PowerShell'а работают? Посмотрите это: Running Windows PowerShell Scripts — как разрешить исполнение неподписанных локальных скриптов, и почему требуется указывать путь к скрипту.

Цитата m0nkrus:
Что скажете? »
У меня, например, не «Boot Загрузоч», а «Системны». Windows XP Professional, SP,3 RU.
Стоп. У Вас логика с errorlevel — мне не понятная. Словами опишите.

Последний раз редактировалось Iska, 25-04-2013 в 23:36.


Отправлено: 23:25, 25-04-2013 | #17


Аватара для m0nkrus

Старожил


Сообщения: 148
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Iska, с PowerShell посмотрю позже.

Логика с errorlevel простая: если в файле найдена ключевая строка, информирующая, что на ней размещен загрузочный диск (он в системе один), то ошибки нет и это GPT, если такой строки ни на одном из GTP-дисков не обнаружено, то, и поиск не дал результата - ошибка - значит по остаточному признаку загрузочным диском считать MBR.

Мы рассматриваем случай для семерки, не забыли? Случай с ХР - это за пределами ТЗ.

Отправлено: 10:11, 26-04-2013 | #18


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


m0nkrus, спасибо, теперь ясно.

Цитата m0nkrus:
Мы рассматриваем случай для семерки, не забыли? Случай с ХР - это за пределами ТЗ. »
Ну, тогда сам бог велел PowerShell пользовать.

Отправлено: 10:56, 26-04-2013 | #19


Пользователь


Сообщения: 92
Благодарности: 30

Профиль | Отправить PM | Цитировать


m0nkrus, на тему оптимизации: логично было бы вместо detail disk использовать uniqueid disk, и если ID содержит "{" - то диск имеет GUID, и следовательно GPT.
Код: Выделить весь код
@echo off
CD /d %~dp0
for /f "tokens=2" %%I IN ('Echo List Disk ^| Diskpart ^| Findstr /e "Boot Загрузоч"') do echo Select Disk ^%%I > diskpart.txt && echo uniqueid disk >> diskpart.txt
for /f "tokens=*" %%J IN ('Diskpart /s diskpart.txt ^| find "{"') DO (
    if errorlevel==0 ( echo Загрузочный диск GPT
                       Set Sys=GPT
    ) else (
                       echo Загрузочный диск MBR
                       Set Sys=MBR
    )
)
pause

Последний раз редактировалось Ксеноинженер, 26-04-2013 в 20:06.


Отправлено: 19:52, 26-04-2013 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Узнать, MBR или GPT?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - Как разбить HDD диск: MBR или GPT ? jolo Накопители (SSD, HDD, USB Flash) 22 09-12-2014 04:46
Разное - GPT в MBR без потери данных V1P3RS Microsoft Windows 7 13 02-04-2014 03:09
Разное - GPT в MBR и нерабочий WiFi pavel.trice@vk Microsoft Windows 7 1 20-01-2013 13:33
Установка - [решено] Установка Windows 7 на SSD с MBR-разметкой (требует GPT) AtlASS Microsoft Windows 7 14 14-11-2012 06:31
HDD - [решено] Восcтановить MBR и/или информацию.. Dick Накопители (SSD, HDD, USB Flash) 17 27-07-2012 18:33




 
Переход