как преобразовать серийный номер компьютера в строку - PullRequest
2 голосов
/ 01 июня 2011

Прежде всего, я хотел бы знать, могу ли я использовать эти две инструкции

gwmi win32_bios | select serialnumber

gwmi win32_Computersystemproduct | select identifyingnumber

безразлично.

Второй вопрос: почему, если я пишу

$sn = gwmi win32_bios | select serialnumber | out-string

$sn.gettype() возвращает мне system.object

и

$sn.length возвращает мне 561, даже если мой серийный номер состоит из 22 символов.Благодарю.

Ответы [ 4 ]

2 голосов
/ 01 июня 2011

Используя Out-String, вы преобразуете вывод gwmi win32_bios | select serialnumber в строку и сохраняете ее в $sn.Итак, $sn теперь будет иметь следующее содержимое:

PS> $sn

serialnumber
------------
xxxxxxx

Итак, $sn.length показывает вам длину всей этой строки.Если вы хотите изменить его только на серийный номер:

PS> $sn = gwmi win32_bios | select -Expand serialnumber | out-string
PS> $sn
xxxxxxx    
PS> $sn.Length
9

Как видите, мой серийный номер (я удалил оригинал) имеет ширину всего 7 символов.Но $sn.length показывает 9. Возможно, после вывода есть пара скрытых символов.Я вижу пустую строку после вывода на консоль.

В реальной точке это пространство добавляется Out-String.Так что тебе это даже не нужно.Вы можете сделать:

PS> $sn = gwmi win32_bios | select -Expand serialnumber
PS> $sn
XXXXXX
PS> $sn.Length
7

$sn все еще строка.

PS> $sn.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object
2 голосов
/ 01 июня 2011

Похоже, что эти два свойства wmi дают одинаковый результат на моей машине.Я предполагаю, что они тянут из одного места.

С точки зрения результатов GetType, я получаю это:

IsPublic IsSerial Name                                     BaseType                                                                                                                    
-------- -------- ----                                     --------                                                                                                                    
True     True     String                                   System.Object

Что означает, что $ sn является строкой, котораяполученный из System.Object.

Ах да ... последняя часть.$ sn - это не просто серийный номер.Это заголовки, форматирование, пробелы и все свойства результата функции GetType ().

1 голос
/ 02 июня 2011

Или вы можете просто сделать это:

$sn = (gwmi win32_bios).serialnumber 
1 голос
/ 01 июня 2011

если вы выполните get-member для вывода gwmi win32_bios | select serialnumber, вы увидите, что он на самом деле имеет следующие свойства, как и любой объект в .NET.

typeName: Selected.System.Management.ManagementObject

Name         MemberType   Definition                                
----         ----------   ----------                                
Equals       Method       bool Equals(System.Object obj)            
GetHashCode  Method       int GetHashCode()                         
GetType      Method       type GetType()                            
ToString     Method       string ToString()                         
serialnumber NoteProperty System.String serialnumber=N1B85 T10 55757

Если вам нужен серийный номер, вам нужно сделать следующее:

$sn = gwmi win32_bios | select serialnumber
$sn.serialnumber

Таким образом, вы выбираете содержимое свойства serialnumber объекта serialnumber.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...