如何将pc序列号转换为字符串

时间:2011-06-01 01:06:24

标签: powershell object-to-string

首先,我想知道我是否可以使用这两条指令

gwmi win32_bios | select serialnumber

gwmi win32_Computersystemproduct | select identifyingnumber

无差别。

第二个问题是为什么我写

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

$sn.gettype()返回system.object

$sn.length即使我的序列号由22个字符组成,也会返回561。谢谢。

4 个答案:

答案 0 :(得分:2)

看起来这两个wmi属性在我的机器上给出了相同的结果。我猜他们是从同一个地方拉的。

就GetType的结果而言,我得到了这个:

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

这意味着$ sn是一个String,它派生自System.Object。

哦,是的......最后一部分。 $ sn不仅仅是序列号。它是GetType()函数结果的标题,格式,空格和所有属性。

答案 1 :(得分:2)

通过使用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 :(得分:1)

如果你在gwmi win32_bios | select serialnumber的输出上执行get-member,你会发现它实际上具有以下属性,就像.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属性的内容。

答案 3 :(得分:1)

或者你可以这样做:

$sn = (gwmi win32_bios).serialnumber