3

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

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

4 回答 4

2

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

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

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

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

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

于 2011-06-01T01:30:20.027 回答
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
于 2011-06-01T03:49:23.393 回答
1

如果您对输出执行 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

这样您就可以选择序列号对象的序列号属性的内容。

于 2011-06-01T02:21:40.260 回答
1

或者你可以这样做:

$sn = (gwmi win32_bios).serialnumber 
于 2011-06-02T11:25:01.413 回答