2013-07-22 4 views
4

Итак, у меня есть сценарий powershell, который выходит в определенное время и загружает файлы с сайта и сохраняет его в нашей сети. Это действительно супер просто, но у меня есть одна проблема, которая мне нужна. Во-первых, код:Скрипт Powershell для загрузки и имен файлов

$client = new-object system.Net.Webclient 
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/489641.TXT","\\risokcdatp001\automated_data\PeopleInfo\DataFile\Traffic\IL\Madison\July_ $(get-date -f yyyyMMdd.TXT)") 
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/599256.TXT","\\risokcdatp001\automated_data\PeopleInfo\DataFile\Traffic\IL\Madison\August_ $(get-date -f yyyyMMdd.TXT)") 
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/429855.TXT","\\risokcdatp001\automated_data\PeopleInfo\DataFile\Traffic\IL\Madison\September_ $(get-date -f yyyyMMdd.TXT)") 

Вы можете увидеть на сайте он идет к, а затем он складывает файлы в нашей сети. Проблема в том, что мне нужно назвать файлы на основе даты и времени, загруженного на сайт. Смотрите следующий HTML-код для этого:

<td width="65%" colspan="2"> 
     <div align="center"><font size="3"><a href="http://app1.co.madison.il.us/circuitclerk/dockets/63/489641.TXT" target="_blank"><b>MONTH OF JULY 2013</b></a></font></div> 
    </td> 
    <td> 
     <div align="center"><font size="3"><b>July 05, 2013 (11:19 AM)</b></font></div> 
    </td> 

Как получить powersheel, чтобы получить это значение (Июль 05, 2013 (11:19 утра)) и использовать его в своем имени файла, как в следующем: июль-UpdatedYYYYMMDD .текст? Благодаря!

+0

Вы управляете источником HTML? – Eris

+0

Нет, источник контролируется судом. – cardinalsfan

ответ

3

Если у вас должна быть точная дата/время, указанное на странице, вам необходимо обратиться к решению. Начните с изучения страницы индекса (откуда появился второй отрывок), затем работайте с этим, чтобы извлекать URL-адреса и метки времени и загружать их, но с новым именем файла.

За исключением ... вы не можете easily parse arbitrary HTML with regular expressions. Теперь, если вы знаете, что этот HTML-код довольно статичен в том, как он сформировался, вы, возможно, сойдете с ним. Но будьте готовы к тому, что вещи сломаются, если суд изменит свою страницу даже самым маленьким битом.

Если вам не нужен этот уровень точности, вы можете использовать заголовки ответов HTTP, которые приходят вместе с файлом при его загрузке. Из этого вы можете получить дату Last-Modified, о которой сообщает сервер, - последняя дата/время, когда файл был изменен на самом сервере. Это не обязательно дата, которую вы видите на веб-странице, а скорее, когда они помещают файл там (поэтому, если бы было 2-часовое отставание от производства до публикации, вы могли бы увидеть эту разницу).

R - это мой RAMdisk, который я использую для создания темпов. Исправьте свои пути по мере необходимости.

$client = New-Object system.net.WebClient; 
$client.DownloadFile("http://app1.co.madison.il.us/circuitclerk/dockets/63/489641.TXT","r:\tempfile.txt"); 
$updated = Get-Date $wc.ResponseHeaders["Last-Modified"] -Format "yyyyMMdd"; 
Rename-Item -Path "r:\tempfile.txt" -NewName "r:\July-Updated$updated.txt"; 

Если вы используете PowerShell 3.0, вы можете использовать invoke-webrequest, чтобы получить файл в память затем записать его непосредственно на диск с соответствующим именем, так как invoke-webrequest возвращает объект, содержащий как данные ответа и заголовки, которые вам затем может обрабатываться по мере необходимости.

Еще один вариант - связаться с судом и посмотреть, есть ли у них другой, более удобный для пользователя способ доступа к данным. RSS или XML-канал или какой-либо другой вид шлюза, который предназначен для того, что вы пытаетесь сделать.

+0

спасибо, это отлично! Мне бы хотелось иметь 3.0, но моя работа не слишком довольна использованием PS вообще. У меня много занятой работы, и я пытаюсь научиться тому, как сделать компьютер большей частью LOL. Еще раз спасибо, я исправлю свой код завтра и дам вам знать, как он работает, когда он работает. – cardinalsfan

+0

«но моя работа не слишком довольна использованием PS вообще». Это очень плохо, потому что PowerShell - это предпочтительный способ администрирования Windows Server и большинства других программных продуктов MS в будущем. Сейчас это стандартная часть Windows, и нет никаких веских оснований для того, чтобы * не использовать ее вместо старых технологий. – alroc

+0

Я должен был заметить, что я аналитик данных, просто пытаюсь упростить свою работу. Они не дадут мне никаких ИТ-ресурсов, чтобы заставить пауков получать файлы, которые я хочу, а не загружать их вручную каждый месяц, я просто делаю сценарии powershell, чтобы сделать это для меня. Я бы ЛЮБЛЮ, если бы суд смог дать нам это путем подачи какого-то типа, но они не слишком увлекались этой идеей. – cardinalsfan

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