上周我问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文档有超链接,最终,我正在尝试诊断我的脚本是否正确查找它们,或者我是否正确地将它们输出到控制台。
答案 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