当我运行.ps1文件时,Powershell只会出错

时间:2018-10-26 15:14:33

标签: powershell

我正在下面运行此脚本,当我在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 ”))和($ _。innerHTML-喜欢“ $ month ”)})。href + ~~~~~~~~~~ 该字符串缺少终止符:“。 在C:\ User \ Documents \ DMIS \ web_scrape2.ps1:8 char:1 + 表达式中缺少结尾的')'。     + CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException     + FullyQualifiedErrorId:TerminatorExpectedAtEndOfString

2 个答案:

答案 0 :(得分:2)

根据问题描述和原始表格或您的问题,听起来您遇到了字符编码问题

您的代码包含非ASCII范围 Unicode引号_ -(左双引号U+201c和右双引号{{3} })和标点符号(EN DASH U+201d)- PowerShell原则上将 识别为ASCII对应字符,但仅如果它正确解释了输入文件的字符编码

请确保将脚本另存为带有BOM的 UTF-8 ,以使Windows PowerShell能够正确识别这些字符。
(即使没有BOM表,如果UTF-8编码,PowerShell Core 也会正确识别它们。)

答案 1 :(得分:0)

根据https://www.unicode.org/charts/PDF/U0000.pdf的Unicode标准

该代码使用“英语中的首选双引号字符”。

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