我目前有一个Power Shell脚本,它使用WMI在计算机上查询服务标签/序列号&然后使用SOAP请求查询Dell的网站以获取保修信息。问题是,对于某些计算机,我在查询中收到多个结果,而不是单个保修日期。我需要做的是能够比较返回的值以获得正确的保修信息。我认为我需要将返回的结果解析成数组,然后进行比较,但我不确定。任何帮助表示赞赏。
$c = 'localhost'
$service = New-WebServiceProxy -Uri https://xserv.dell.com/services/assetservice.asmx?WSDL
$system = Get-WmiObject -ComputerName $c win32_bios -ErrorActionSilentlyContinue
$serial = $system.serialnumber
$guid = [guid]::NewGuid()
$info = $service.GetAssetInformation($guid,'check_warranty.ps1',$serial)
$info | Select-Object -ExpandProperty entitlements | Where-Object {$_.ServiceLevelCode -eq "SV" -or $_.ServiceLevelCode -eq "TS"}
以下是单台计算机的返回结果:
ServiceLevelCode: TS
ServiceLevelDescription : ProSupport
Provider : DELL
StartDate : 8/8/2014 12:00:00 AM
EndDate : 8/7/2016 12:00:00 AM
DaysLeft : 306
EntitlementType : Active
ServiceLevelCode : TS
ServiceLevelDescription : ProSupport
Provider : DELL
StartDate : 8/7/2013 12:00:00 AM
EndDate : 8/7/2014 12:00:00 AM
DaysLeft : 0
EntitlementType : Expired
答案 0 :(得分:2)
也许您应该只获得有效保修?我也有dell机器,但我不知道是否会有更多那些有效的。如果有,你仍然应该期待更多的结果。所以你可以试试这个:
$info | Select-Object -ExpandProperty entitlements |
Where-Object {$_.ServiceLevelCode -in "SV","TS" -and $_.EntitlementType -eq "Active"} |
Select-Object -ExpandProperty EndDate
你也可以做一个并选择最新的。还是很难说。如果只有一个有效的权利,那就没问题了。
$info | Select-Object -ExpandProperty entitlements |
Where-Object {$_.ServiceLevelCode -eq "SV" -or $_.ServiceLevelCode -eq "TS"} |
Sort-Object -Property @{Expression=[datetime]$_.EndDate} |
Select -First 1
答案 1 :(得分:0)
以下是我目前管理的95%戴尔计算机的戴尔保修。我拿了这个并为每个部分创建了一个Function,然后使用该函数将Data拉入我们用于Inventory的SQL表中。
$serviceTag = [string]$SerialNumber = (Get-WmiObject -Namespace "root\cimv2" -Class Win32_SystemEnclosure).SerialNumber
$WebProxy = New-WebServiceProxy -Uri 'http://xserv.dell.com/services/AssetService.asmx?WSDL' -UseDefaultCredential
$WebProxy.Url = 'http://xserv.dell.com/services/AssetService.asmx'
$WarrantyInformation = $WebProxy.GetAssetInformation(([guid]::NewGuid()).Guid, "Dell Warranty", $serviceTag)
$WarrantyInformation | Select-Object -ExpandProperty Entitlements | Where-Object {$_.ServiceLevelCode -eq "SV" -or $_.ServiceLevelCode -eq "TS"} | ForEach-Object {
$StartDate=[datetime]$_.StartDate
$EndDate=[datetime]$_.EndDate
[string]$Provider=$_.Provider
[string]$DaysLeft=$_.DaysLeft
[string]$Status=$_.EntitleMentType
$warrantydays = New-TimeSpan -start $StartDate -end $EndDate
if ($warrantydays.Days -gt 366){
write-host ("Provider: "+ $Provider)
write-host ("Status: " + $Status)
write-host ("Days Left: " + $DaysLeft)
write-host ("Start Date: " + $StartDate)
write-host ("End Date: " + $EndDate)
}
}