【问题标题】:How do I use Powershell to print a list of hyperlinks that appear in a Word document?如何使用 Powershell 打印出现在 Word 文档中的超链接列表?
【发布时间】:2013-10-21 19:25:05
【问题描述】:

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

【问题讨论】:

  • 关于你的 foreach 的错误是因为语法错误,至少你应该写类似$hyperlinks | %{ $_.address }

标签: powershell hyperlink


【解决方案1】:

这一行:

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多