2011-10-11 2 views
1

프린터 상태 웹 페이지를 모니터링하고 잉크 량이 25 % 이하로 떨어지면 이메일로 스크립트를 보내고 싶습니다. 임 꽤 Powershell에서 할 수 있지만, 어떻게 해야할지에 손실에 임 확신.Webscraping in powershell 모니터 페이지

<h2>Supply Status</h2> 

    <table class="matrix"> 
       <thead> 
    <tr> 
     <th>Supply Information</th> 
     <th>Status</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td>Black Toner</td> 
     <td>End of life</td> 
    </tr> 
    <tr> 
     <td>Cyan Toner</td> 

     <td>Under 25%</td> 
    </tr> 
    <tr> 
     <td>Magenta Toner</td> 
     <td>Under 25%</td> 
    </tr> 
    <tr> 

     <td>Yellow Toner</td> 
     <td>Under 25%</td> 
    </tr> 
    </tbody> 

    </table> 
    <p> 

감사 :

는 해당 페이지의 HTML입니다.

아담

답변

1

가장 쉬운 방법은 아마 당신이 PowerShell에서 가져올 수 HTML Agility Pack 될 것이다. Lee Holmes에는 간단한 예가 나와 있습니다. 본질적으로 XML과 유사한 API를 사용하여 HTML DOM에 액세스합니다.

+0

나를 조금 도울 수 있겠습니까? 저는이 모든 것을 매우 신.습니다. – user989384

+2

나도. 일반적으로 나는 필요한 것을 얻기 위해 예제와 문서를 사용한다. 그러나 지금까지는이 라이브러리를 사용하는 데 꽤 오랜 시간이 걸렸으므로 지출해야하는 모든 노력을 지출하지 않으면 도움이되지 않습니다. – Joey

3

@ Joey의 답변을 바탕으로 HTML 애자일 팩과 함께 소용돌이 치다.

$html = new-object HtmlAgilityPack.HtmlDocument 
$result = $html.Load("http://full/path/to/file.htm") 
$colors = $html.DocumentNode.SelectNodes("//table[@class='matrix']//tbody/tr") 
$result = $colors | % { 
    $color = $_.SelectSingleNode("td[1]").InnerText 
    $level = $_.SelectSingleNode("td[2]").InnerText 
    new-object PsObject -Property @{ Color = $color; Level = $level; } | 
     Select Color,Level 
} 
$result | Sort Level | ft -a 

여기에는 이미 HTML 민첩성 팩을 PowerShell에로드했다고 가정합니다. 당신의 출력은 아래와 같다, HTML이 제공하는 예제를 사용

[System.Reflection.Assembly]::LoadFrom( 
     (join-path $profileDirectory HtmlAgilityPack) 
     + "\HtmlAgilityPack.dll") | Out-Null 

: 광산으로 내 프로필에로드

이 시점에서

output from PowerShell script

, 당신은 출력을 가지고 그것을 이메일로 보낼 수 있습니다.