Microsoft Excel 2010 Dokumente per Scheduled Task mit Powershell erstellen lassen
Wir standen neulich vor der Aufgabe ein Excel 2010 Dokument automatisch per Powershell auf einem Windows 2008 R2 Server zu befüllen. Nach den Ersten genommenen Hürden, wie z.B. dass man die Culture Info auf „en-US“ setzten muss um ein Excel 2010 Dokument zu öffnen und es speichern zu können, füllte sich unser Excel Dokument automatisch. Nun wollten wir unser erstelltes Powershell Skript als Scheduled Task laufen lassen. Das Excel Dokument wurde zwar per Scheduled Task erstellt jedoch nicht abgespeichert. Nach einiger Recherche im Internet sind wir dann letzlich auf die Lösung gestoßen.
Um ein Microsoft Excel 2010 Dokument in einem Powershell Skript per Scheduled Task
auf einem Windows 2008 Server erstellen zu lassen muss folgender Ordner auf dem Server existieren,
ansonsten wird das Excel Dokument nicht gespeichert.
1 2 |
Windows 2008 x64 "C:\Windows\SysWOW64\config\systemprofile\Desktop" |
1 2 |
Windows 2008 x32 "C:\Windows\System32\config\systemprofile\Desktop" |
Als Powershell Skript könnte man es wie folgt implementieren:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$fExists = <strong>Test-Path</strong> <em>-Path</em> "C:\Windows\SysWOW64\config\systemprofile\Desktop" if($fExists -eq $false){ <strong> new-item</strong> "C:\Windows\SysWOW64\config\systemprofile\Desktop" <em>-ItemType</em> Directory } $ci = [System.Globalization.CultureInfo]"en-US" $Excel = <strong>New-Object</strong> <em>-ComObject</em> "Excel.application" $Excel.visible = $false $workbook = $Excel.Workbooks $workbook = $workbook.psbase.gettype().InvokeMember("Add",[Reflection.BindingFlags]::InvokeMethod,$null,$workbook,$null,$ci) $workSheet = $workBook.Worksheets.item(1) $worksheet.Cells.item(<Line>,<Row>).formulalocal = “Text Zelle” $excel.workbooks.psbase.gettype().InvokeMember("SaveAs",[Reflection.BindingFlags]::InvokeMethod,$null, $workbook, <ExcelDateiPfad>, $ci) > $null $excel.workbooks.psbase.gettype().InvokeMember("Close",[Reflection.BindingFlags]::InvokeMethod,$null, $workbook, 0, $ci) > $null $ExcelProcess = <strong>get-process</strong> excel $ExcelProcess | <strong>foreach</strong> {<strong>stop-process</strong> ($_.id)} [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) [gc]::collect() [gc]::WaitForPendingFinalizers() |
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>