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

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

Ответить
Настройки темы
CMD/BAT - [решено] Рандомный VolumeID

Аватара для Freem

Старожил


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

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


Здравствуйте

Для тестирования ПО возникла необходимость генерации новых VolumeID диска.
Подскажите пожалуйста пример батника, который бы использовал утилиту Марка Руссиновича и ее синтаксис?

То есть, при запуске батника должна выполнятся команда:
volumeid.exe C: xxxx-xxxx

где, xxxx-xxxx - рандомный набор букв и цифр.

Отправлено: 01:18, 05-01-2016

 

Старожил


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Набор символов, из которых будет генерироваться ID
Set Charset=0123456789ABCDEF
Set CharsetSize=16

:: инициализируем для получения более качественного рандома
Call :RandomStringGen 12 init

:: Получаем новый ID и устанавливаем его
Call :RandomStringGen 4 IDPart1 && Call :RandomStringGen 4 IDPart2
Echo New Volume ID is [%IDPart1%-%IDPart2%]
volumeid C: %IDPart1%-%IDPart2%
Pause&Exit

:RandomStringGen (length, name)
Set "RndStringLength=%~1" & Set "RndString=%~2"
:loop
Echo !Random!!Random!>nul
Set /A Offset=%CharsetSize%*!Random!/32768
Set %RndString%=!Charset:~%Offset%,1!!%RndString%!
Set /A RndStringLength-=1
If %RndStringLength% GTR 0 GoTo :loop
Exit /B
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:06, 05-01-2016 | #2



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

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


Ветеран


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

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


Код:

Код: Выделить весь код
@echo off

cmd/c exit/b %random%%random%%random%

echo volumeid.exe C: %=ExitCode:~,4%-%=ExitCode:~4%

pause>nul
.

Если понравится, то "echo" уберите.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:47, 05-01-2016 | #3


Ветеран


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

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


vbscript:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strNewVolumeID

strNewVolumeID = GetVolumeIDPart() & "-" & GetVolumeIDPart()

WScript.Echo strNewVolumeID
WScript.CreateObject("WScript.Shell").Run """C:\Program Files (x86)\Sysinternals.com\Sysinternals Suite\Volumeid.exe"" C: " & strNewVolumeID & "", 0, True

WScript.Quit 0

Function GetVolumeIDPart()
	Randomize Timer
	
	GetVolumeIDPart = Right("0000" & Hex(Int(Rnd() * 2^16)), 4)
End Function

Кстати, про «C:» — проще использовать для этих целей присоединённый виртуальный диск, поскольку ему можно сделать detach/attach сценарием (хоть в том же скрипте/файле, что и генерация и задание VolumeID) без перезагрузки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:27, 05-01-2016 | #4


Забанен


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

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


Альтернативные решения (до кучи) без использования Sysinternal'овской утилиты для генерации случайного volume id:
Код: Выделить весь код
powershell /nop /ex bypass "&{(-join [GUID]::NewGuid().Guid[9..17]).ToUpper()}"
или
Код: Выделить весь код
0</* :
@cscript /nologo /e:jscript "%~f0" %*&exit /b */0;
(function() {
  with (new ActiveXObject('Scriptlet.TypeLib')) {
    WScript.echo(GUID.substring(10, 19));
  }
}());
К слову, в случае с PowerShell можно вообще обойтись без volumeid Руссиновича.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:19, 05-01-2016 | #5


Ветеран


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

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


greg zakharov, утилита его не генерирует.

Цитата greg zakharov:
К слову, в случае с PowerShell можно вообще обойтись без volumeid Руссиновича. »
?

Отправлено: 12:52, 05-01-2016 | #6


Забанен


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

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


Цитата Iska:
утилита его не генерирует.
Все верно, она лишь устанавливает новый id для тома, увы, изначально неправильно выразился.
Цитата Iska:
?
VolumeId для установки нового серийного номера тома использует DeviceIoControl, вызвать который посредством рефлексии можно следующим образом:
Код: Выделить весь код
([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object {
  $_.ManifestModule.ScopeName.Equals('System.Data.dll')
}).GetType(
  'System.Data.SqlTypes.UnsafeNativeMethods'
).GetMethod(
  'DeviceIoControl', [Reflection.BindingFlags]40
).Invoke(...)
И если у пользователя достаточно прав, поменять id особой проблемы не составит.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:28, 05-01-2016 | #7


Ветеран


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

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


Цитата greg zakharov:
VolumeId для установки нового серийного номера тома использует DeviceIoControl, вызвать который посредством рефлексии можно следующим образом: »
Спасибо, ясно. Рабочий код не хотите попробовать сделать (в целом, вместе с генерацией)?

Отправлено: 15:46, 05-01-2016 | #8


Забанен


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

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


Цитата Iska:
Рабочий код не хотите попробовать сделать (в целом, вместе с генерацией)?
Можно в принципе. Надо будет на git создать репу как-нибудь и туда код закинуть.

Отправлено: 16:26, 05-01-2016 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Рандомный запуск на CMD AlexPebody Скриптовые языки администрирования Windows 3 30-08-2013 10:25
Разное - Как вернуть оригинальный VolumeId тома DartVanya Microsoft Windows 7 8 20-09-2012 01:09
CMD/BAT - [решено] Не получается сменить VolumeID Sat_Kelman Скриптовые языки администрирования Windows 2 27-12-2011 12:32




 
Переход