回答here。我正在做以下事情:
param(
# Required. Download source location (website).
[Parameter(Mandatory=$True)]
[URI] $URL
)
process
{
$wc = New-Object System.Net.WebClient;
$fileItems = $wc.downloadstring($URL) -split "<a\s+" | %{ [void]($_ -match "^HREF=[`'`"] ([^`'`">\s]*)"); $matches[1] };
return $fileItems;
}
我收到以下错误:
ForEach-Object : Cannot index into a null array.
At J:\LMIData\PowerShell\HTTP_based_downloader.ps1:9 char:61
+ $fileItems = $wc.downloadstring($URL) -split "<a\s+" | % <<<< { [void]($_ -match "^HREF=[`'`"]([^`'`">\s]*)"); $matches[1]; };
+ CategoryInfo : InvalidOperation: (1:Int32) [ForEach-Object], RuntimeException
+ FullyQualifiedErrorId : NullArray,Microsoft.PowerShell.Commands.ForEachObjectCommand
“char:61”位置就在%
之后。
现在,有趣的是此代码以前有效。这可能是-match
正则表达式中的一个问题吗?我没有声明$matches
数组 - 可能就是这样吗?
我在这里不知所措,因为我仍然是PowerShell的新手。我知道我可以使用Invoke-WebRequest
获取powershell v3 +中的链接列表,但这不是一个选项,因为正在运行的系统暂时被锁定在v2。
答案 0 :(得分:2)
看起来更像是您的下载可能不是您所期望的。 尝试添加一些调试。
param(
# Required. Download source location (website).
[Parameter(Mandatory=$True)]
[URI] $URL
)
process
{
$wc = New-Object System.Net.WebClient;
$Download = $wc.downloadstring($URL)
Write-Debug "Download is $Download"
$fileItems = $Download -split "<a\s+" | %{ [void]($_ -match "^HREF=[`'`"] ([^`'`">\s]*)"); $matches[1] };
return $fileItems;
}
并将$ DebugPreference设置为'Continue'amd,看看你的d / l有效负载是什么样的。