首先,我想知道我是否可以使用这两条指令
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。谢谢。
答案 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