Powershell только выдает ошибки при запуске файла .ps1 - PullRequest
0 голосов
/ 26 октября 2018

Я запускаю этот скрипт ниже, и когда я выполняю внутри powershell, он запускается и предоставляет точную ссылку, которую я запрашиваю.Когда я сохраняю файл ps1 и вызываю файл, я получаю эту ошибку.Почему он работает нормально в powershell, а не в самом файле?

Мой код:

$year = $date.year
$date = GET-DATE 
$datemonth=$date.month
$month = (Get-Culture).DateTimeFormat.GetMonthName($datemonth)
$url = 'https://health.mil/Reference-Center/Technical-Documents?query=DMIS'
$links=((Invoke-WebRequest –Uri $url).Links | Where-Object {($_.innerHTML - 
like "*DMIS ID Monthly*") -and ($_.innerHTML -notlike "*Change*") -and 
($_.innerHTML -like "*$month*")}).href
$links

Ошибка:

В C: \ Users \ Documents \ DMIS\ web_scrape2.ps1: 6 char: 178 + ... HTML -подобный " Change ") -and ($ _. innerHTML-like " $ month ")}). href+ ~~~~~~~~~ В строке отсутствует терминатор: ". В C: \ User \ Documents \ DMIS \ web_scrape2.ps1: 8 char: 1 + Отсутствует закрытие ')' в выражении. + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: TerminatorExpectedAtEndOfString

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Исходя из описания проблемы и исходной формы или вашего вопроса, похоже, что у вас проблема кодировки символов .

Ваш код содержит неASCII-диапазон Кавычки в Unicode_ - (ЛЕВАЯ КНОПКА ДВОЙНОГО КВАТИРОВАНИЯ, U+201c и ПРАВО ДВОЙНОГО КВАРТИРА, U+201d) и пунктуация (EN DASH U+2013) - , который PowerShell распознает в принципе в качестве их аналогов ASCII, но , только если он интерпретирует кодировка символов входного файла правильно.

Обязательно сохраните сценарий как UTF-8 с спецификацией , чтобы Windows PowerShell моглараспознавать эти символы правильно.
(PowerShell Core распознает их правильно, если кодируется в UTF-8 даже без спецификации).

0 голосов
/ 26 октября 2018

Из стандарта Unicode на https://www.unicode.org/charts/PDF/U0000.pdf

В коде используются «предпочтительные символы английского языка для парных кавычек».

0022 " QUOTATION MARK
• neutral (vertical), used as opening or closing
quotation mark
• preferred characters in English for paired
quotation marks are 201C “  & 201D ”

Обновление:

Когда я запускаю этот код, вот результаты. Это правильно?

PS H:\src\tws> Get-Content .\t.ps1
$year = $date.year
$date = GET-DATE
$datemonth=$date.month
$month = (Get-Culture).DateTimeFormat.GetMonthName($datemonth)
$url = 'https://health.mil/Reference-Center/Technical-Documents?query=DMIS'

$links = ((Invoke-WebRequest –Uri $url).Links |
    Where-Object {
        ($_.innerHTML -like "*DMIS ID Monthly*") -and
        ($_.innerHTML -notlike "*Change*") -and
        ($_.innerHTML -like "*$month*")
    }).href

$links

PS H:\src\tws> .\t.ps1
/Reference-Center/Technical-Documents/2018/09/27/DMIS-ID-Monthly-October-2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...