Powershell操作word詳細

4002 ワード

Powershell操作wordサーバ、イベント、Windowsネットワーク上のさまざまなデータのレポートをPowerShellで生成する読者が多いと仮定します.純粋なテキストファイル、さらにはきれいなHTMLレポートを作成したことがあるかもしれません.しかし、Microsoft Wordを使用することもできます.もちろん、Wordがインストールされていることを前提としています.このシリーズの第2部では、PowerShellをWordドキュメントにスタイルを適用する方法を説明します.
Wordアプリケーションオブジェクトを作成するPowerShellは、COMインタフェースでWordアプリケーションを制御できます.興味深い点は、すべての操作をインタラクティブに行うことができますが、最終的にはスクリプトですべてを操作することができることを望んでいます.Wordプログラムオブジェクトの作成から始めます.
 
  
PS C:\> $word=new-object -ComObject "Word.Application"

気になる場合は、このオブジェクトをGet-Memberコマンドに出力できます.各オブジェクトを配管を介してGet-Memberに出力して探索できる一連のオブジェクトを作成します.
次に、ドキュメントオブジェクトを作成します.
 
  
PS C:\> $doc=$word.documents.Add()

Wordプログラムが起動し、新しいドキュメントが作成されましたが、画面には何も見えません.通常、バックグラウンドで実行する必要があるため、これは正常です.ただし、作成したドキュメントを表示する場合は、アプリケーションのVisibleプロパティをTrueに設定する必要があります.
 
  
PS C:\> $word.Visible=$True

テキストを挿入する前に、フォーカスを取得する必要があります.Selectionオブジェクトを作成すると、フォントのサイズや色の設定などの操作ができます.第2部では、これらの操作について説明します.
 
  
PS C:\> $selection=$word.Selection

PowerShellで文書にテキストを挿入する
カーソルがドキュメントの上部にあり、テキストの挿入を開始できます.現在の日付と時刻をSelectionオブジェクトのType Text()メソッドで挿入します.
 
  
PS C:\> $selection.TypeText((Get-Date))

テキストを挿入し続けると、日付のすぐ後ろにテキストが表示されます.TypeParagraph()メソッドでリターン記号を挿入します.
 
  
PS C:\> $selection.TypeParagraph()

テキストを挿入し続けましょう.WMIでローカルコンピュータのオペレーティングシステム情報を取得します.
 
  
PS C:\> $os=Get-WmiObject -class win32_OperatingSystem
PS C:\> $selection.TypeText("Operating System Information for $($os.CSName)")

すべての非システム属性を書き込むため、すべての属性名を保存するために配列をすばやく作成します.
 
  
PS C:\> $os.properties | select Name | foreach -begin {$props=@()} -proc {$props+="$($_.name)"}

$osからすべてのプロパティを取得し、Wordドキュメントを挿入できます.重要な点はTypeText()の値が文字列型であるため、内部接続されたPowerShell式をパイプを介してOut-Stringに出力する必要があります.
 
  
PS C:\> $selection.TypeText(($os | Select -Property $props | Out-String))

必要に応じて、文字や画像を挿入し続けることもできます.操作が完了すると、ドキュメントを保存して閉じます.
 
  
PS C:\> $doc.SaveAs([ref]"c:\work\osreport.docx")
PS C:\> $doc.Close()

[ref]を使用してファイルパスにデータ型を変換することを確認してください.新しいドキュメントを作成しないと仮定すると、残りはWordアプリケーションを閉じることです.
 
  
PS C:\> $word.quit()

これらはすべてのことをしなければならない.最終的に生成されたWordドキュメントは使用できますが、あまりきれいではないかもしれません.私の例では、Wordは等幅フォントではなく、PowerShellの出力フォーマットは等幅フォントを使用していると仮定しています.(注:出力の結果が一致しない可能性があります).
2番目の例
 
  
$objWord = New-Object -Com Word.Application
$objWord.Visible = $true
$objMissingValue = [System.Reflection.Missing]::Value

$objDocument = $objWord.Documents.Add($objMissingValue, $objMissingValue, $objMissingValue, $objMissingValue)
$objParaHeader = $objDocument.Paragraphs.Add($objMissingValue)
$objParaHeader.Range.Style = "Heading 1"
$objParaHeader.Range.Text = "The power of Microsoft Windows PowerShell"
$objParaHeader.Range.InsertParagraphAfter()

$objParaText = $objDocument.Paragraphs.Add($objMissingValue)
$objParaText.Range.Text = "I will not say I have failed 1000 times; I will say that I have discovered 1000 ways that can cause failure �C Thomas Edison."
$objParaText.Range.InsertParagraphAfter()

$filename = 'C:\\Script\\PowerShell-Example.doc'
$objDocument.SaveAs($filename,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue,
$objMissingValue, $objMissingValue)

##Once the script has added all of the required content the document should be closed:
$objDocument.Close()
$objWord.Quit()