0

先週この質問をしましたが、変更するハイパーリンクがスクリプトで見つかりません。今、私はバックアップして、1 つのドキュメントを開いて、その中のハイパーリンクを一覧表示しようとしています。ドキュメントには、同じドキュメント内の多数のアンカーへのハイパーリンクと、同じディレクトリ内のドキュメントへの 2 つのハイパーリンクが含まれていることを確認しました。ただし、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
    }

次のエラーが表示されます...しかし、null 配列を読み取ろうとしているかどうかは不明ですか? または値が空白の場合。

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 に割り当てます。Hyperlinks.NET 文字列にはプロパティがありません。あなたがしたいことは、そのドキュメントを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 に答える