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

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

Ответить
Настройки темы
WMI - [решено] Перевод серийного номера из 16-ричного значения в символьную строку

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


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

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


Код: Выделить весь код
wmic path Win32_PhysicalMedia where "tag like '%Drive0%'" Get Tag,SerialNumber
Выдает серийный номер в 16-ричном формате, в отличие от VBScript
2020202020202020202020203157304641444b57
а должно быть W1F0DAWK

1) Хотелось бы знать почему консольная WMIC себя так ведет?
2) Главный вопрос: как элегантно перевести в символьную строку. Есть же там команды на подобие
Код: Выделить весь код
Set /A x=0x3A
, правда не совсем то.
3) Этот класс некорректно определяет серийные номера USB-устройств.
Но ничего страшного, обойдусь парсингом PNPDevice класса DiskDrive. Но вот проблема (хоть и не критичная),
если задать команду
Код: Выделить весь код
wmic path Win32_PhysicalMedia Get SerialNumber
я получу ответ Invalid XML Request, потому что в серийный номер USB уст-ва закрался непечатаемый символ.
Возможно ли от этого уйти, не используя ключевое слово Where?

Заранее благодарен за ответы.

Отправлено: 03:55, 25-03-2013

 

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


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

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


Актуально.

-------
Alex Dragokas


Отправлено: 21:43, 28-03-2013 | #2



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

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


Ветеран


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

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


Цитата Diskretor:
Выдает серийный номер в 16-ричном формате »
Как воспроизвести?
Код: Выделить весь код
> wmic path Win32_PhysicalMedia where "tag like '%Drive0%'" Get Tag,SerialNumber
SerialNumber          Tag                                                         
110310PBN418M7JRREVE  \\.\PHYSICALDRIVE0

> wmic path Win32_PhysicalMedia Get SerialNumber
SerialNumber                                      
110310PBN418M7JRREVE

Отправлено: 22:31, 28-03-2013 | #3


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


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

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


Foreigner, это хороший вопрос.

Вероятно, понадобится система Win 7 x64 ru или подобная.
Завтра проверю на работе на XP.

Я ошибся. VBScript тоже выдает в таком формате (просто запускал Scriptomatic с повышенными правами).

У меня в консоли вот что показывает (вывод от 4 ЖД):

P.S. проблема частично решена. WMI выдает верные данные, если консоль запускать в режиме повышенных прав:
А вот этот вывод: 2020202020202020202020203157304641444b57 - я вообще не знаю, содержит ли туже самую строку, или является просто мусором.

Доп. вопрос: SN диска типа SSD определился неверно. Знаете ли другой класс или метод, которым можно попробовать вытянуть верный серийник?

-------
Alex Dragokas


Отправлено: 23:05, 28-03-2013 | #4


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


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

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


Доп.: с SSD похоже разобрался: http://www.intel.com/support/ru/mt/mt_win.htm
Т.е. S/N на упаковке этих дисков так называемый Secure S/N и не соответствует обычному S/N.

-------
Alex Dragokas


Отправлено: 01:05, 29-03-2013 | #5


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


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

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


Сегодня проверил на XP и расстроился. Пробовал и от имени главного Администратора (через Runas) с заданием пароля - все равно выдает серийник в этом странном 16-ричном формате. Ну что ему еще сделать?

-------
Alex Dragokas


Отправлено: 17:39, 29-03-2013 | #6


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


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

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


Помогли на другом форуме:

Преобразование идет попарно HEX -> 10-ричная СС -> Chr
Нет ли готового скрипта для этого?

-------
Alex Dragokas


Отправлено: 21:34, 29-03-2013 | #7


Аватара для CyberDaemon

DOOMer


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

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


0x2020202020202020202020203157304641444b57 == "<12 пробелов>1W0FADKW" != "W1F0DAWK", т.е. оно "little endian" и там еще нужно байты попарно менять местами.

-------
"640 K ought to be enough for anybody" Bill Gates, 1981

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

Отправлено: 23:00, 29-03-2013 | #8


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


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

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


Спасибо. Готово.

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

set x16=434f2d5a3238585741315758374437454f303856
Call :Hex_To_String "%x16%" str
echo.%str%

pause>nul
exit /B


:Hex_To_String %1-in.Reversed.Hex.Number %2-out.String
  SetLocal& set "x16=%~1"
  set n=45
  for %%A in (- . / 0 1 2 3 4 5 6 7 8 9) do set s.!n!=%%A& set /a n+=1
  set n=65
  for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set s.!n!=%%A& set /a n+=1
  set n=97
  for %%A in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set s.!n!=%%A& set /a n+=1
  set xs=
  for /L %%C in (0,4,8184) do (
    if "!x16:~%%C,1!"=="" goto _ex_Hex
    set /A cplus=%%C+2
    call set /A x10=0x%%x16:~!cplus!,2%%
    call set xs=!xs!%%s.!x10!%%
    set /A x10=0x!x16:~%%C,2!
    call set xs=!xs!%%s.!x10!%%
  )
  :_ex_Hex
  EndLocal& set "%~2=%xs%"& Exit /B

-------
Alex Dragokas


Отправлено: 02:14, 30-03-2013 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Смена серийного номера Smarty Microsoft Windows 2000/XP 9 02-07-2009 18:21
Разное - Смена серийного номера на Win 2000 timur_m Лицензирование продуктов Microsoft 1 04-02-2009 15:05
Win 2003 - смена серийного номера Zorax Microsoft Windows NT/2000/2003 5 06-12-2007 10:36
Интеграция серийного номера в Win98 alex1999 Microsoft Windows 95/98/Me (архив) 4 20-10-2005 15:54
Ввод серийного номера-вопрос! ssi Хочу все знать 5 02-08-2004 11:17




 
Переход