[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
DiskPart Advanced Script Console Автор: GeStart Live a.k.a GemoStarter
Системные требования: Windows XP или новее
DiskPart ASC - Программа, предназначенная для упрощения использования скриптов для программы DiskPart, встроенного в Windows консольного менеджера разделов. Использование ASC устраняет необходимость всякий раз перед использованием скрипта сверяться со списком имеющихся дисков и изменять скрипт, подставляя в него номера нужных дисков и разделов.
После запуска ASC будет выведен список всех доступных для работы физических дисков. После выбора диска будет выведена более детальная информация о нём, а так же список имеющихся на нём разделов. После выбора раздела будет отображена более детальная информация о нём.
Выбрав диск и, если нужно, раздел, можно будет выбрать один из заранее подготовленных скриптов в выпадающем списке. После нажатия кнопки "Run Script" ASC автоматически подставит номера диска и раздела в нужные места скрипта, и передаст его присутствующему в системе diskpart.exe.
ОСТОРОЖНО: В архиве с программой присутствуют два скрипта. Они удаляют с диска имеющуюся таблицу разделов (командой CLEAN), создают новую таблицу GPT или MBR (зависит от скрипта) и структуру разделов для установки Windows. Скрипты приложены, в основном, для демонстрации функционала, но полностью работоспособны, и при случайном запуске не на том диске обрекут вас на долгое и мучительное восстановление информации.

О скриптах:

Автоматическая подстановка номеров диска и раздела в скрипт достигается за счёт использования в скрипте переменных:
#ANTI# - Заглушка, предотвращающая случайный запуск скрипта без ASC, рекомендуется размещать первой строкой
#DISK# - Номер диска
#PART# - Номер раздела
#VOLU# - Номер тома, соответствующего #PART#
#PSTL# - Стиль разделов диска #DISK#
#GSEC# - Размер сектора #DISK# из информации о геометрии диска
#PSEC# - Размер физического сектора #DISK# (не все диски его сообщают)
#LSEC# - Размер логического сектора #DISK# (не все диски его сообщают)
#MNTP# - Точка монтирования раздела #PART# (без конечного "\")
#MNTPF№# - Свободная буква диска, это номер свободной буквы, если букв не хватит для всех номеров, скрипт не запустится
В скриптах поддерживаются простые вычисления. Выражение должно быть заключено в фигурные скобки,например:
{ 2 * 2 }
На место этого выражения будет подставлен его результат, то есть 4.
Вкладывать выражения друг в друга нельзя! Ошибки внутри выражений не проверяются, будьте внимательны.
Поддерживаются операторы:
^ - Возведение в степень
* - Умножение
/ - Деление
+ - Сложение
- - Вычитание
Не все йогурты одинаково полезны, и не все скрипты одинаково хорошо подходят для разных сценариев работы. К примеру, скрипт, написанный для MBR-дисков, будет непригоден для работы с GPT, и наоборот. Кроме того, некоторым скриптам достаточно выбрать только диск, другим же необходимо знать и раздел. Отсеять безусловно неподходящие скрипты поможет соблюдение шаблона именования:
DPMGRSEAU.AnyText
Собственно шаблоном здесь является DPMGRSEAU, то есть текст, располагающийся до первой точки. Всё, что находится после неё, игнорируется программой.
D - Для работы скрипту необходим номер диска
P - Необходим номер раздела
M - Поддерживается стиль разделов MBR
G - Поддерживается стиль разделов GPT
R - Поддерживаются RAW-диски (без таблицы разделов)
S - Поддерживаются диски со стандартным форматом сектора (512 байт как физически, так и логически)
E - Поддерживаются диски с форматом сектора 512e (4096 байт физически, 512 байт логически)
A - Поддерживаются диски с форматом сектора 4K (4096 байт как физически, так и логически)
U - Поддерживаются диски с неизвестным форматом сектора (любые другие комбинации, в том числе если диск не сообщает размер #PSEC# и #LSEC#)
Если скрипт может работать с любым стилем разделов и RAW, то можно не указывать стиль в шаблоне.
Если размер сектора не играет роли, в шаблоне нужно указать 0 либо не указывать чисел вовсе.
Если скрипт может работать без диска, раздела, вне зависимости от стиля разделов и размера сектора, шаблон можно оставить пустым. Можно и удалить шаблон вовсе, но во избежание неожиданного поведения лучше указать пустой. То есть .AnyText

Интерфейс:

1 - Список дисков
2 - Детальная информация о диске, выбранном в 1
3 - Список разделов на диске, выбранном в 1
4 - Детальная информация о разделе, выбранном в 3
5 - Список скриптов
6 - Запуск скрипта, выбранного в 5
7 - Запуск DiskPart без скрипта (для ручной работы)

Благодарности:

sergeysvirid, Adler, nikzzzz, vovan1982, Ander_73 и все, кого забыл упомянуть - за тестирование программы и ценные советы
Вложение

Версия 2.0



Последний раз редактировалось: Gemostarter (2019-07-24 17:04), всего редактировалось 8 раз(а)

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 9 месяцев
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
NeleGal-38,
$text = new Process(["C:\\Windows\\SysWOW64\\cmd.exe", "/c C:\\Windows\\sysnative\\ping.exe ya.ru"])->start()->getInput()->readFully();
var_dump($text);

[Цитировать]

    NeleGal-38
  • 122
  • Стаж: 9 лет
  • Сообщений: 506
  • Репутация:38

    [+] [-]
  • Откуда: Из леса вестимо
nikzzzz, Дошло до меня! )) Спасибо!

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
54025парсятся не зависимо от языка, пример - list disk
Это код для list partitions... С ним проблем и так не возникало, а вот об list disk и list volume с этими их пустыми полями все мозги сломал... Черт с ним, логику программы ломать сейчас не собираюсь, меня пока больше волнует корректность копирования exe и mui в сборках, где они отсутствуют, кроме 7 (не PE) нигде это не тестировал.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
Как вам интерфейс?

Скриншот

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
Gemostarter, я целую минуту пытался понять, нафига два окна с дисками ag

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
Ander_73, Подумаю, как лучше обозначить, что зачем ah
Кстати, отдельный список томов (именно томов) нужен или нет? Преимуществ он, КМК, не даст - вся инфа уже есть в поле информации о разделе...

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
Gemostarter, тома вообще имеют смысл только в случае RAID. Иначе они совпадают с разделами.
---
На мой вкус, самое правильное - это список дисков и под каждым диском, при нажатии "на крестик", раскрывается дерево разделов (не могу сразу найти внятный скриншот; надеюсь, ты понял, о чём я).

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
Ander_73, Древовидную структуру можно сделать, но будет менее наглядно - аккуратной таблички она не подразумевает. Это затруднит идентификацию дисков и разделов "с первого взгляда", к тому же усложнив код вычленения из этой инфы номера диска/раздела. Оно нам надо?
А как сделать, чтобы и волки целы, и овцы сыты, я даже не знаю...

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
68112"с первого взгляда"
У тебя во второй таблице отображаются сразу ВСЕ разделы ВСЕХ дисков что-ли? Я думал, всё равно надо "встать" на диск, чтобы во второй таблице отобразились его разделы. И тогда гораздо нагляднее именно разворачивать дерево разделов выбранного диска. Тогда нужно только два окна (главное и свойства) и не будет путаницы, какого диска раздел сейчас текущий (в твоём же случае надо совместить информацию из ТРЁХ окон - диск, раздел, инфа)
Но это сугубое имхо.
---
УПД. Или, действительно, сразу в одной таблице выводить ВСЕ диски и под ними ВСЕ разделы. Старт будет затруднён, зато сразу всё наглядно. Гы.

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
Ander_73, Не, разделы только для выбранного диска выводятся, конечно ag
Но юзеру нет необходимости помнить номер диска в тот момент, как он будет выбирать раздел. Да и вообще никакой необходимости знать номера нет - обычно диски и разделы идентифицируют по размеру, для более сложных случаев предусмотрены поля расширенной информации (справа). И вполне можно, убедившись, что выбран Тот_Самый_Диск, запомнить только то что он Тот_Самый, и спокойно хлопать глазами, разбираясь в его разделах.
З.Ы. А выводить все разделы сразу мне даже проще - структура с данными о диске включает информацию обо всех его разделах. При построении списка дисков эта инфа просто игнорируется, а в момент выбора диска запрашивается заново.

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 9 месяцев
  • Сообщений: 3810
  • Репутация:127

    [+] [-]
68131А выводить все разделы сразу мне даже проще
Так может и обойтись двумя окнами?
В первом все диски и разделы, во втором - инфа о текущем объекте.
Типа:
Диск 0 1000 Тб GPT
    Раздел 0 100 Мб
    Раздел 1 200 Гб
    Раздел 2 799 Гб
Диск 1 2000 Тб GPT
    Раздел 0 500 Мб
    Раздел 1 1200 Гб

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
68134Так может и обойтись двумя окнами?
Кажется мне, что это будет неудобно. Менее удобно, чем сейчас, во всяком случае. *здесь была мудрая фраза о котлетах и мухах*

[Цитировать]

    Gemostarter
  • 15956
  • Стаж: 7 лет 7 месяцев
  • Сообщений: 323
  • Репутация:35

    [+] [-]
Вот такой вариант, похоже, будет окончательным.

Скриншот

Кстати, кому-нибудь известен надёжный способ определить, является раздел "основным" или "логическим"? Консольные проги и WMI не предлагать. Кроме того, метод д.б. совместим с WinXP и большинством WinPE.
Пока реализовал определение по косвенном признаку, не уверен, что будет работать везде...

[Цитировать]

    vovan1982
  • 214
  • Стаж: 9 лет 9 месяцев
  • Сообщений: 1129
  • Репутация:76

    [+] [-]
  • Откуда: Ростов-на-Дону
Gemostarter, может через хек редактор проверять наличие метки активности?

[Цитировать]

    SunOK
  • 9
  • Стаж: 10 лет
  • Сообщений: 352
  • Репутация:32

    [+] [-]
  • Откуда: Україна, Перлина Поділля
aa
vovan1982, основной раздел может и не быть активным.
Gemostarter, посмотрите в спецификации стандарта, может и вправду регламентируется так, что можно HEX-значения считывать (менеджеры разделов как-то узнают об этом...).

Страница 2 из 7


Показать сообщения:    

Текущее время: 21-Ноя 11:53

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы