如何使用Powershell打印出现在Word文档中的超链接列表?

时间:2013-10-21 19:25:05

标签: powershell hyperlink

上周我问this question,我的脚本找不到任何要更改的超链接。现在我正在备份并尝试简单地打开一个文档并列出其中的超链接。我已经验证该文档包含指向同一文档中多个锚点的超链接,以及两个指向同一目录中文档的超链接。但是,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文档有超链接,最终,我正在尝试诊断我的脚本是否正确查找它们,或者我是否正确地将它们输出到控制台。

1 个答案:

答案 0 :(得分: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