0

Я работаю над написанием сценария в PowerShell, чтобы вытащить веб-сайт UPS и проверить, доставлен ли пакет или нет, и, если это необходимо, внести доставленные номера отслеживания в .csv, однако, похоже, он либо откладывает все пакеты независимо от статуса доставки, либо ни от одного из них. Что еще хуже, я работаю с powershell v1.0 на рабочем компьютере, который я не могу обновить, без каких-либо модулей, кроме AppLocker, BitsTransfer, PSDiagnostics и TroubleshootingPack. Вот мой код:Проверка веб-сайта о статусе доставки, возвращающего все пакеты, независимо от состояния

$ie = New-Object -com internetexplorer.application 
$ie.visible= $false 
$ie.silent= $true 
$file= import-csv "C:\**FILEPATH**.csv" 
$newfile= New-Item "C:\**FILEPATH**$(get-date -format dd-MM-yyyy)_delivered.csv" -type file -force 
foreach ($i in $file) 
    {$tagnum= $i | select-object -expandproperty "Tag Number" 
    $trackingid = $i | select-object -expandproperty "Tracking ID" 
    $refnum= $i | select-object -expandproperty "Attribute Ref #" 
    $findest= $i | select-object -expandproperty "Final Dest" 
    if ($trackingid.length -gt 1) 
     {$ie.navigate("**URL**=$trackingid") 
     while($ie.ReadyState -ne 4) {start-sleep -m 100} 
     $trackstate= $ie.getproperty("st_del_en_us") 
     if($trackstate -ne "Delivered"){ 
     break} 
     elseif($trackstate="Delivered"){ 
      "$tagnum, $findest, $trackingid, $refnum" | Add-Content $newfile 
     } 
    } 
} 
$ie.close 
[system.runtime.interopservices.marshal]::releasecomobject($ie) 
remove-variable ie 

Здесь применимое исходный код для сайта:

<SPAN><A class="infoAnchor btnIconR hozAnchor" id=tt_spStatus onclick="javascript:return false;" href="javascript:void(0)" jQuery111105469456426992596="209">Delivered </A> 
 
<DIV id=ttc_bullpenspStatus style="DISPLAY: none"> 
 
<DIV id=ttc_tt_spStatus><!-- cms: id="st_del_en_us" actiontype="0" --> 
 
<H3>Delivered </H3>UPS has delivered the shipment. <BR><BR> 
 
<TABLE width="100%" border=0 cellSpacing=0 cellPadding=0> 
 
<TBODY> 
 
<TR> 
 
<TD><A><SPAN class=standardheader></SPAN><BR></A></TD></TR></TBODY></TABLE> 
 
<TABLE width="100%" border=0 cellSpacing=0 cellPadding=0> 
 
<TBODY> 
 
<TR> 
 
<TD colSpan=3>Residential deliveries that do not require a signature may be left in a safe place, out of sight and out of weather, at the driver's discretion. This could include the front porch, side door, back porch, or garage area. If you have instructed the driver to leave the shipment with a neighbor or leasing office, this would be noted on a yellow UPS InfoNotice left by the driver.</TD></TR> 
 
<TR> 
 
<TD colSpan=3><IMG width=1 height=10 alt="" src="/img/1.gif" border=0></TD></TR></TBODY></TABLE> 
 
<TABLE width="100%" border=0 cellSpacing=0 cellPadding=0> 
 
<TBODY> 
 
<TR> 
 
<TD></TD></TR></TBODY></TABLE> 
 
<TABLE width="100%" border=0 cellSpacing=0 cellPadding=0> 
 
<TBODY> 
 
<TR> 
 
<TD colSpan=3><BR></TD></TR></TBODY></TABLE></DIV></DIV></SPAN>

** EDIT **

я теперь предоставлен доступ обновить powershell и запустить v5.0 со всеми модулями по умолчанию. Тем не менее, я все еще имею ту же проблему.

ответ

0

После обновления powershell я смог немного изменить ситуацию и заставить скрипт работать. Вот конечный продукт для всех, кто может быть заинтересован:

$file= import-csv "**FILEPATH**\Intransit_report.csv" 
$newfile= New-Item "**FILEPATH**\$(get-date -format dd-MM-yyyy)_delivered.csv" -type file -force -value "Tag Number,Final Dest,Tracking ID,Reference Number" 
$exceptionfile= New-Item "**FILEPATH**\$(get-date -format dd-MM-yyyy)_delivery_exceptions.csv" -type file -force -value "Tag Number,Final Dest,Tracking ID,Reference Number" 
foreach ($i in $file) { 
    $tagnum= $i | select-object -expandproperty "Tag Number" 
    $trackingid = $i | select-object -expandproperty "Tracking ID" 
    $refnum= $i | select-object -expandproperty "Attribute Ref #" 
    $findest= $i | select-object -expandproperty "Final Dest" 
    if ($trackingid.length -gt 1){ 
     $uri= "**URI**=$trackingid" 
     $html= Invoke-Webrequest -URI $uri 
     $fields= $HTML.ParsedHtml 
     $trackstate= $fields.getElementByID("ttc_tt_spStatus") 
     if($trackstate.innerText -like "*Business Days*"){ 
     break} 
     elseif($trackstate.innerText -like "Delivered*"){ 
      "$tagnum, $findest, $trackingid, $refnum" | Add-Content $newfile 
     } 
     elseif($trackstate.innerText -like "*Attempt Made*"){ 
      "$tagnum, $findest, $trackingid, $refnum" | Add-Content $exceptionfile 
     } 
    } 
}