Functions/Get-DellWarranty.ps1

function Get-DellWarranty {
    param(
        #Specifies the Dell Service Tag of the device we want to check
        [Parameter(Mandatory = $true,
                   ValueFromPipelineByPropertyName = $true,
                   ValueFromPipeline = $true,
                   Position = 0)]
        [Alias('SerialNumber')]
        [String] $AssetTag,
        #Optionally pass a hostname for easier reporting on the results
        [Parameter(Mandatory = $false,
                   ValueFromPipelineByPropertyName = $true,
                   ValueFromPipeline = $false,
                   Position = 1)]
        [Alias('PSComputerName')]
        [String] $Hostname
    )

    begin
    {
        #Dell Web Service URI
        [uri]$ServiceURI='http://xserv.dell.com/services/assetservice.asmx?WSDL'

        #Build output list up
        $OutputHeaders = @(
            'Hostname'
            'AssetTag'
            'ServiceTag'
            'SystemID'
            'Buid'
            'Region'
            'SystemType'
            'SystemModel'
            'SystemShipDate'
            'ServiceLevelCode'
            'ServiceLevelDescription'
            'Provider'             
            'StartDate'
            'EndDate'              
            'DaysLeft'       
            'EntitlementType'
        )

        #Connect to web service proxy
        try
        {
            $WebService = New-WebServiceProxy -uri $ServiceURI -Namespace WebServiceProxy
        }
        catch
        {
            Write-Error "Unable to connect to Dell warranty service URI '$ServiceURI' - $_"
            return
        }
    }

    process
    {
        try
        {
            if(-not $Hostname){
                $Hostname = 'Not Provided'
            }

            #Retrive Dell warranty information based on asset tag
            $DellInfo = $WebService.GetAssetInformation('12345678-1234-1234-1234-123456789012','dellwarrantycheck',$AssetTag.Trim())
            
            #If the Dell info has entitlements loop through each one else just return the single result
            if($DellInfo.Entitlements){
                Foreach($Entitlement IN $DellInfo.Entitlements){
                    $Out = '' | Select-Object $OutputHeaders
                    $Out.Hostname = $Hostname
                    $Out.AssetTag = $AssetTag
                    $Out.ServiceTag = $DellInfo.AssetHeaderData.ServiceTag
                    $Out.SystemID = $DellInfo.AssetHeaderData.SystemID
                    $Out.Buid = $DellInfo.AssetHeaderData.Buid
                    $Out.Region = $DellInfo.AssetHeaderData.Region
                    $Out.SystemType = $DellInfo.AssetHeaderData.SystemType
                    $Out.SystemModel = $DellInfo.AssetHeaderData.SystemModel
                    $Out.SystemShipDate = $DellInfo.AssetHeaderData.SystemShipDate
                    $Out.ServiceLevelCode = $Entitlement.ServiceLevelCode
                    $Out.ServiceLevelDescription = $Entitlement.ServiceLevelDescription
                    $Out.Provider = $Entitlement.Provider
                    $Out.StartDate = $Entitlement.StartDate
                    $Out.EndDate = $Entitlement.EndDate
                    $Out.DaysLeft = $Entitlement.DaysLeft
                    $Out.EntitlementType = $Entitlement.EntitlementType
                    $Out
                }
            }else{
                $Out = '' | Select-Object $OutputHeaders
                $Out.Hostname = $Hostname
                $Out.AssetTag = $AssetTag
                $Out.ServiceTag = $DellInfo.AssetHeaderData.ServiceTag
                $Out.SystemID = $DellInfo.AssetHeaderData.SystemID
                $Out.Buid = $DellInfo.AssetHeaderData.Buid
                $Out.Region = $DellInfo.AssetHeaderData.Region
                $Out.SystemType = $DellInfo.AssetHeaderData.SystemType
                $Out.SystemModel = $DellInfo.AssetHeaderData.SystemModel
                $Out.SystemShipDate = $DellInfo.AssetHeaderData.SystemShipDate
                $Out.ServiceLevelCode = $null
                $Out.ServiceLevelDescription = $null
                $Out.Provider = $null
                $Out.StartDate = $null
                $Out.EndDate = $null
                $Out.DaysLeft = $null
                $Out.EntitlementType = $null
                $Out
            }
        }
        catch
        {
            Write-Error "Failed to obtain asset information for '$Hostname' using asset tag '$AssetTag' - $_"
            return
        }
    }

    end
    {
        $ErrorActionPreference = 'Continue'
    }


}