Wissen/X06_Technology_COMObjects.ps1

# ? TITEL COM-Objekte
# ? DESCRIPTION 'Component Object Model' verwenden
# ? TAGS COM WMI CIM
# ? VERSION 2019.09.10

# Das Component Object Model ist eine von Microsoft entwickelte Technik
# zur Interprozesskommunikation unter Windows. COM-Komponenten können sowohl in Form
# von Laufzeitmodulen (DLLs) als auch als ausführbare Programme umgesetzt sein.
# COM soll eine leichte Wiederverwendung von bereits geschriebenem Programmcode ermöglichen,
# zum Teil auch über Betriebssystemgrenzen hinweg. COM-Komponenten können unabhängig
# von der Programmiersprache eingesetzt werden.
# Das Component Object Model wurde von Microsoft 1992 mit der grafischen Benutzeroberfläche Windows 3.1 eingeführt.

Get-CimInstance -ClassName Win32_COMClass | Measure-Object # Davon können COM-Objekte erzeugt werden

#region BEISPIEL Microsoft Excel

# ! NACHTEIL (Excel bzw. Office muss installiert sein, Office PIA 2010 downloaden)
# ? BESSER CSV oder 'OpenXML for Office'

$xls = New-Object -ComObject "Excel.Application"
$xls.Visible = $false # Debugging
$wb = $xls.Workbooks.Add()
$ws = $wb.Worksheets.Add()
$a1 = $ws.Range("A1")
$a1.Value2 = "PowerShell ist spitze!"
$wb.SaveAs("c:\temp\meinmappe.xlsx")
$xls.Quit()

#endregion

#region BEISPIEL Microsoft Word

$word=New-Object -ComObject "Word.Application" 
$word.Visible=$true

$doc=$word.Documents.Add()

$win=$doc.Windows.Item(1)
$win.View.ShowAll=$true

$objAbs=$doc.Paragraphs.Item(1)
$objAbs.Range.Text="Titel`rAbsatztext"
$objAbs.Range.Text=($objAbs.Range.Text + "zweite Zeile")
$objAbs=$doc.Paragraphs.Item(1)
$objAbs.Style="Überschrift 1"

$erg=$doc.PrintOut([ref]$false)     # VORTEIL von COM-Object
$erg=$doc.prin
$erg
$doc.SaveAs([ref]"c:\Temp\PS und Word.docx")
$doc.Close([ref]$false)
$word.Quit()
$word=$null

#endregion