我有以下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;}
答案 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物理服务器一章