PowerShell脚本“ Get-VMHost Hardware.SystemInfo.OtherIdentifyingInfo”将为服务标签返回2个值

时间:2018-08-20 16:00:30

标签: windows powershell virtual-machine vmware

我有以下Power-shell脚本,我想在其中获取服务器的ServiceTag:-

((Get-VMHost | Get-View).Hardware.SystemInfo.OtherIdentifyingInfo | ?{$_.IdentifierType.Key -like "ServiceTag"}).IdentifierValue

但是我已经注意到,对于某些服务器,我将获得2个表示服务标签的值,所以这正常吗?如果可以,那么我可以使用哪一个来识别服务器?

编辑 当我运行此脚本时:-

((Get-VMHost | Get-View).Hardware.SystemInfo.OtherIdentifyingInfo | ?{$_.IdentifierType.Key -like "ServiceTag"}).IdentifierValue
foreach ($vmhost in Get-VMHost) {
    $ServiceTag = $vmhost.ExtensionData.Hardware.SystemInfo.OtherIdentifyingInfo; $ServiceTag | Get-Member

    if ([string]::IsNullOrEmpty($ServiceTag)) { $ServiceTag = 'N/A' }

    Write-Host "$($vmhost.Name) - $ServiceTag"
}

我知道了:-

Name            MemberType Definition
----            ---------- ----------
Equals          Method     bool Equals(System.Object obj)
GetHashCode     Method     int GetHashCode()
GetType         Method     type GetType()
ToString        Method     string ToString()
DynamicProperty Property   VMware.Vim.DynamicProperty[] DynamicProperty {get;set;}
DynamicType     Property   string DynamicType {get;set;}
IdentifierType  Property   VMware.Vim.ElementDescription IdentifierType {get;set;}
IdentifierValue Property   string IdentifierValue {get;set;}

1 个答案:

答案 0 :(得分:2)

这实际上是一条评论,但是由于需要将其格式化为多行,因此我将其添加为答案

如果这样做会发生什么

select
  course_name,
  concat_ws(',', iif(day1,'Mon'), iif(day2,'Tue'), iif(day3,'Wed'), iif(day4,'Thu'), iif(day5, 'Fri'))
from course;

似乎上面的代码没有返回带有服务标签的字符串,而是一个对象。该对象具有foreach ($vmhost in Get-VMHost) { $ServiceTag = $vmhost.ExtensionData.Hardware.SystemInfo.OtherIdentifyingInfo | Where-Object { $_.IdentifierType.Key -eq "ServiceTag"} if ([string]::IsNullOrEmpty($ServiceTag)) { $ServiceTag = 'N/A' } Write-Host "$($vmhost.Name) - $ServiceTag" } 属性,并包含带有实际服务标签的字符串。因此,我们需要更进一步:

IdentifierValue

修改

似乎从物理服务器获取序列号时,您必须处理硬件供应商公开这些属性的方式。不同的供应商对待它们的方式有所不同。

您已经尝试过的各种代码返回foreach ($vmhost in Get-VMHost) { $ServiceTag = $vmhost.ExtensionData.Hardware.SystemInfo.OtherIdentifyingInfo | Where-Object { $_.IdentifierType.Key -eq "ServiceTag"} if (($ServiceTag) -and $ServiceTag.IdentifierValue) { $ServiceTag = $ServiceTag.IdentifierValue } Write-Host "$($vmhost.Name) - $ServiceTag" } 的两个值。 发生这种情况是因为硬件供应商(例如Cisco)会为每个处理器提供序列号。

发现了here

向下滚动到 ESXi物理服务器一章