0

我上周问了这个问题,我的脚本找不到任何要更改的超链接。现在我正在备份并尝试简单地打开一个文档并列出其中的超链接。我已经验证该文档包含指向同一文档中多个锚点的超链接,以及指向同一目录中文档的两个超链接。但是,要么 Powershell 没有在文档中找到链接,要么我不正确地将列表输出到控制台。

这是我的基本代码

$word = New-Object -ComObject Word.Application
$doc ="R:\path\Reporting_Emergency_Or_Hazardous_Situation_-_BC_CC.doc" 
$hyperlinks = @($doc.Hyperlinks)
$hyperlinks
$word.quit()

或者,对于第 4 行

Write-Host $hyperlinks

或者,再次为第 4 行

$hyperlinks | % {Write-Host $_.address}

没有错误,只是空白结果。甚至没有对$hyperlinks数组的对象引用。

当我将第 4 行修改为

% $address in $hyperlinks {
    Write-Host $._address
    }

我收到以下错误...但不清楚我是否正在尝试读取空数组?或者如果该值为空白。

ForEach-Object : Cannot bind parameter 'Process'. Cannot convert the "in" value of type "System.String" to type "System.Management.Automation.ScriptBlock".
At F:\path\HyperLinkScrub.ps1:46 char:2
+ % <<<<  $address in $hyperlinks {
    + CategoryInfo          : InvalidArgument: (:) [ForEach-Object], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.ForEachObjectCommand

我在这里想念什么?我已经验证 Word 文档具有超链接,最终,我试图诊断我的脚本是否没有正确查找它们,或者我没有正确地将它们输出到控制台。

4

1 回答 1

3

这一行:

$doc ="R:\path\Reporting_Emergency_Or_Hazardous_Situation_-_BC_CC.doc" 

创建一个字符串并将其分配给变量 $doc。.NET 字符串没有Hyperlinks属性。我认为您想要做的是将该文档加载到 Word 中:

$word = new-object -com Word.Application
$doc = $word.Documents.Open("$home\links.docx")
$doc.Hyperlinks

或者

$doc.Hyperlinks | Foreach Address
于 2013-10-21T19:33:52.703 回答