2013-09-24 3 views
1

Я использую powershell для мониторинга, и я хочу проверить, существует ли приложение jnlp на веб-сайте и доступно для загрузки. У меня есть ссылка на .jnlp, и до сих пор я загружаю файл с помощью .navigate().Ссылка на тестовое приложение с powershell

$ie = new-object -com "InternetExplorer.Application" 
Try { 
    $ie.navigate("http://bla.com/testApp.jnlp") 
} Catch { 
    #$_ 
    $ErrorMessage = $_.Exception.Message 
} 

Я попытался поймать исключение, указав недействительное имя файла, но оно не работает. Также я подумал о загрузке приложения и попытаюсь удалить файл после этого, чтобы удостоверился, что он действительно существует, но он будет слишком медленным, так как у меня есть много jnlps для проверки.

Есть ли еще один простой и элегантный способ сделать это? Я хочу избежать загрузки каждого файла, который я хочу проверить.

ответ

4

Как насчет использования WebClient класс от .Net? Получение данных достаточно просто. Как это так,

$webclient = new-object System.Net.WebClient 
try { 
    # Download data as string and store the result into $data 
    $data = $webclient.DownloadString("http://www.google.com/") 
} catch [Net.WebException] { 
    # A 404 or some other error occured, process the exception here 
    $ex = $_ 
    $ex.Exception 
} 
2

Если вы используете PowerShell 3.0 или выше, вы можете использовать Invoke-WebRequest, чтобы увидеть, если страница существует путем выдачи HTTP HEAD запроса и проверки кода состояния.

$Result = Invoke-WebRequest -uri `http://bla.com/testApp.jnlp` -method head 
if ($Result.StatusCode -ne 200){ 
    # Something other than "OK" was returned. 
} 

Это выполнимо с System.Net.WebClient как хорошо, но это немного больше усилий.

Смежные вопросы