2015-10-06 104 views
0

我目前有一個Power Shell腳本,它使用WMI向計算機查詢服務標籤/序列號&,然後使用SOAP請求查詢Dell的網站以獲取保修信息。問題在於,對於某些計算機,我在查詢中收到多個結果,而不是單個保修日期。我需要做的是能夠比較返回的值以獲得正確的保修信息。我認爲我需要將返回的結果解析爲數組,然後進行比較,但我不確定。任何幫助表示讚賞。Powershell比較返回的結果

$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 

回答

2

也許你應該只得到有效保證?我也有戴爾的機器,但我不知道是否會有更多的那些是有效的。如果有的話,你還是應該期待更多的結果。所以你可以試試這個:

$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 
+0

感謝馬特,不幸的是我不知道如何獲得有效的保證。我認爲我的關鍵是找到一種方法來比較返回結果的結束日期,並選擇最新的日期即8/7/2016 12:00:00 AM比8/7/2014更新12 :00:00 – Raproductions

+0

@生產正是他的'排序'方法。它根據EndDate屬性對結果進行排序並選擇第一個結果。 – TheMadTechnician

+0

@生產''_ _。EntitlementType -eq「活動」'得到有效和_active_保證。它是你在問題中顯示的屬性。除第二個代碼外,還可以獲得最新結束日期的條目。所以從理論上說,日期是你有最後一天的保修期。我的問題是有幾種dell保修的風格。 – Matt

0

以下是我用於從目前管理的戴爾計算機的95%中獲得戴爾保修服務的信息。我接下來爲每個部分創建了一個Function,然後使用該函數將數據提取到我們用於Inventory的SQL Table中。

$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) 
} 
}