Outlook Mail Template mit Powershell verschicken

Hintergrund: Basierend auf einem Inputfile sollen bestimmte Teile in einem (komplexen) Mail Template getauscht werden und dann das Ergebnis verschickt werden.

Lösung: Template erstellen, zu tauschende Stellen irgendwie markieren (§§§CLIENT§§§ z.B.) und das Mail als .MSG speichern.

Script:
$targetdate="10.7.2019"
$targetcomputer="MyPC"
$recipients="a@b.c","d.e@f.h"

$ol=New-Object -ComObject Outlook.Application
$msg=$ol.CreateItemFromTemplate("C:\Temp\Template.msg")
$msg.Subject=$msg.Subject.Replace("§§§DATE§§§",$targetdate).Replace("§§§CLIENT§§§",$targetcomputer)
$msg.HTMLBody=$msg.HTMLBody.Replace("§§§DATE§§§",$targetdate).Replace("§§§CLIENT§§§",$targetcomputer)
foreach ($rec in $recipients)
{
$msg.Recipients.Add($rec)
}
$msg.Save()

# anzeigen
$inspector=$msg.GetInspector()
$inspector.Display()

# $msg.Send() wäre die Alternative

# cleanup
Remove-Variable ol,msg,inspector

Office 2016 Protected View kaputt

Wenn beliebige Office Programme beim Öffnen eines Dokuments meinen das Dokument ist korrupt, kaputt oder sonst irgendwie hinüber und die Dinger das “Internet-Flag” haben könnte es daran liegen dass die Protected View (geschützte Ansicht) nicht starten kann: Die läuft nämlich als Subprozess in einem Application Container und manchmal haben die (oder deren “Gruppe” ALL APPLICATION PACKAGES (S-1-15-2-1)) Probleme bestimmte Bereiche der Registry und/oder Filesystem zu benutzen.

Im gegenständlichen Fall wars C:\WINDOWS\SysWOW64\vcruntime140.dll und msvcp140.dll – im Process Monitor sieht man dann ein ACCESS DENIED beim Zugriff.

Fix:

icacls C:\Windows\SysWOW64\vcruntime140.dll /grant *S-1-15-2-1:(OI)(CI)RX
icacls C:\Windows\SysWOW64\msvcp140.dll /grant *S-1-15-2-1:(OI)(CI)RX

Referenzen:

https://support.microsoft.com/en-za/help/2798317/microsoft-store-apps-fail-to-start-if-default-registry-or-file-permiss

https://answers.microsoft.com/en-us/msoffice/forum/all/office-2016-any-open-in-protected-mode-fails-with/050c6c55-13ca-4536-b471-2520dab3631f

SCCM Client Upgrade findet nicht statt

Szenario: SCCM Update durchgeführt, Client AutoUpgrade enabled, findet aber nicht statt

Fehler im ccmseutp.log:

Failed to get DP locations as the expected version from MP 'https://meinsccm.meinefirma.whatever'. Error 0x87d00215

Grund:

Das SCCM Package “Configuration Manager Client Package” wurde nicht oder nicht korrekt auf den oder die Distribution Points verteilt. Sieht man im Content Status – ist der nicht grün hats was. Im konkreten Fall hat ein “Update Distribution Points” gereicht.

VHD in XenServer importieren

Wählt man “Import…” im XenCenter aus und importiert somit eine VHD von einem Windows Rechner/Share läuft das immer fix mit 100 MBit – was je nach VHD-Größe anstrengend sein kann.

Schneller gehts wie immer wenn man zum schwarzen Fenster greift:

  • Source-Share mounten: mount -t cifs //server/share /mntdir -o domain=…,username=…,password=…,vers=3.0
  • UUID vom Ziel Repositorty ermitteln: xe sr-list
  • VDI erzeugen und UUID speichern (size = bytes): VDI=$(xe vdi-create sr-uuid=… name-label=… virtual-size=…)
  • VHD importieren: xe vdi-import uuid=$VDI filename=/mntdir/my.vhd format=vhd

Hyper-V Gen2 in XenServer importieren

Wer eine Gen2 Hyper-V VM (=UEFI) auf Gen1 (=BIOS) konvertieren muss (in meinem Fall um die VHD auf XenServer zu importieren) muss etwas in die Trickkiste greifen – ich bin hier fündig geworden, hab aber ein paar kleine Änderungen vorgenommen:

  • Gen2 VHD/VHDX mounten
  • via Disk Management neue VHD erzeugen in der Größe der zu kopierenden Datenpartition von der Gen2 VHD – es funktionieren auch dynamic Disks, ist wichtig weil sonst der Import am XenServer u.U. ewig dauert
  • erzeugte VHD mounten falls Disk Management nicht eh vollelektrisch macht
  • Disk mit MBR initialisieren
  • MiniTool Partition Magic Portable herunterladen
  • Partition kopieren – Zielpartition als primary anlegen
  • Ziel VHD dismounten
  • neue Gen1-VM mit Ziel VHD und passendem Windows ISO gemountet erzeugen, sicherstellen dass von CD gebootet wird
  • in Recoveryconsole (CMD) booten
  • in DISKPART das Ziel-Volume selektieren (list vol / sel vol #)
  • Ziel-Volume active setzen (active)
  • auf die Ziel-Windows-Installation wechseln (cd /d c:\)
  • Bootconfig neu erzeugen (bootrec /fixmbr, bootrec /fixboot, bootrec /rebuildbcd)
  • VM ausschalten, VHD in XenServer importieren (Kontextmenü von Host oder Pool/Import… – oder via xe vdi-import (schneller)

VHDX Reads langsam

Keine Ahnung worans liegt aber in dem Fall war am Host (2012R2) der Power Plan auf “Balanced” und die VM (2008R2) hat auf Vollgas nicht mal 100 MB/sek gebracht (zig physische Spindeln).

Power Plan auf “High performance” gesetzt und die Read-Rate ist instant auf erwartbare Werte (800 MB/sek) gesprungen.

Muss irgendeinen Hardwarebezug haben (hier: HP ProLiant DL380 Gen9) – andere Geräte (auch der gleichen Generation aber mit anderen Komponenten) zeigen dieses Verhalten nicht….

Hinweis hab ich hier gefunden.

Stored Procedures mit bestimmten Namen rekompilieren

Weil ich auch das immer wieder vergesse:

use MyDB

declare @proc varchar(50)

declare procs cursor for select SPECIFIC_NAME from INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE='PROCEDURE' and SPECIFIC_NAME like '%whatever%'
open procs
fetch next from procs into @proc
while @@FETCH_STATUS = 0
begin
   print @proc
   exec sp_recompile @proc
   fetch next from procs into @proc
end
close procs
deallocate procs