Import-PSSession beschleunigen

In ein paar Powershell-Scripten, die Befehle an Domain-Controller und Exchange-Server absetzen störte es mich schon seit geraumer Zeit, dass das initiieren der Scripte relativ lange dauert. Besonders bei Exchange-Zugriffen fiel es extrem auf, also fügte ich ein paar Zeitausgaben ein und analysierte die einzelnen Befehle.

param( [string]$uid, [string]$exhost )
function GetElapsedTime() {
$runtime = $(get-date) - $script:StartTime
$retStr = [string]::format("{3}.{4} seconds", `
$runtime.Days, `
$runtime.Hours, `
$runtime.Minutes, `
$runtime.Seconds, `
$runtime.Milliseconds)
$retStr
}
$script:startTime = get-date
write-host "Start: $(GetElapsedTime)"
$session = New-PSSession -Configurationname Microsoft.Exchange -ConnectionUri http://$exhost/powershell
write-host "New-PSSession: $(GetElapsedTime)"
Import-PSSession $session -CommandName "Get-CASMailbox" | Out-Null
write-host "Import-PSSession: $(GetElapsedTime)"
$mailbox = Get-CASMailbox $uid |Select-Object ActiveSyncMailboxPolicy,ActiveSyncEnabled,Name
write-host "Get-CASMailbox: $(GetElapsedTime)"
[string]::format("{0}: {1}, {2}", $mailbox.Name, $mailbox.ActiveSyncEnabled, $mailbox.ActiveSyncMailboxPolicy)

Ausgabe:

Start: 0.0 seconds
New-PSSession: 0.562 seconds
Import-PSSession: 11.296 seconds
Get-CASMailbox: 11.406 seconds
jdoe: True, Default

Fazit: Das größte Problem ist Import-PSSession wenn es sich mit dem Exchange-Server verbindet, es braucht meistens zwischen 11 und 13 Sekunden bis das Script weiter laufen kann. Nach einigem Suchen und Ausprobieren stieß ich auf den Parameter -CommandName, der einschränkt welche Befehle man importieren möchte.

$session = New-PSSession
Import-PSSession $session -CommandName "Get-CasMailBox"

holt nur den angegebenen Befehl in die Session, dafür dauert der Import dann aber auch nur ca 1,5 Sekunden, was die Gesamtlaufzeit des Scriptes immerhin auf ein Zehntel reduziert. Ergebnis:

Start: 0.15 seconds
New-PSSession: 0.468 seconds
Import-PSSession: 1.937 seconds
Get-CASMailbox: 2.156 seconds
jdoe: True, Default

Das ganze bringt natürlich nur einen Vorteil wenn man nur wenige Befehle in einem Script benötigt.

Confluence Seite mit Unterseiten in anderen Space kopieren [Update]

Confluence bietet zwar die Möglichkeit einzelne Seiten in andere Spaces zu kopieren, aber dabei bleiben Anhänge und Unterseiten auf der Strecke. Mit dem Atlassian Command Line Interface lassen sich eine Menge netter Befehle auf der Kommandozeile ausführen, darunter auch dieser:

./confluence.sh -s https://server.local/confluence/ -u username -p secret \
-a copyPage --space currentSpace --title pageTitle --newSpace newSpace \
--parent newParentPage --descendents --copyAttachments --copyComments --copyLabels

Der Befehl verbindet sich mit dem Server und kopiert die Seite pageTitle im Space currentSpace mit all ihren Unterseiten, Dateianhängen und Kommentaren in den Space newSpace als Unterseite von newParentPage.

Die aktuelle Version des Command Line Interface kostet zwar mittlerweile Geld, die letzte freie Version (unter BSD Lizenz) ist jedoch immer noch zum Download verfügbar und kann auch schon eine ganze Menge.

Quelle: (The pain of) managing content in Confluence

Ergänzung 29.10.2012

Mit der hier beschriebenen Methode konnte ich die meisten Seiten migrieren, leider gab es in einem Punkt Probleme: Die Confluence Remote Schnittstelle kommt mit dem Upload von größeren Dateien nicht klar, die Grenze scheint irgendwo bei 5MB oder so zu liegen. Der Fehler ist bereits seit einem Jahr bekannt, hier hat sich jedoch noch nichts getan.

Dafür hat mich die Dokumentation von Confluence zum Löschen von Seiten auf eine Idee gebracht:

  • Seite aus dem alten Space in einen neuen, temporären Space 1 verschieben
  • temporären Space kopieren
  • Seite aus temporärem Space 1 zurück in den alten Space verschieben
  • Seite aus temporärem Space 2 in den Ziel-Space verschieben
  • beide temporäre Spaces löschen

Die Prozedur habe ich noch nicht getestet, ich sehe allerdings keinen Grund wieso es nicht funktionieren sollte.

ESXi 5.1 USB-Stick zur Installation erstellen. [Update]

Nachdem ich einen USB-Stick für die ESXi-Installation nach der Anleitung von VMware erstellt hatte konnte ich nicht davon booten. Ich bekam immer die Fehlermeldung

boot:
menu.c32 not a COM32R image

Keine Ahnung was die Ursache war, in diesem Blogbeitrag schrieb jemand einen Kommentar, dass neuere syslinux-Versionen problematisch seien (ich hatte meinen Stick mit syslinux 4.05 unter Mint Linux 13 erstellt). Mit der Version 494 von UNetbootin solle es gehen. Also probierte ich das aus und erstellte einfach mal einen Stick mit der angegebenen Version, aber ohne weitere Anpassungen zu machen die in dem Beitrag aufgelistet werden.

UNetbootin lief durch, ich habe den Stick in einen Rechner gesteckt, davon gebootet und siehe da, der Installer vom ESXi startet vollkommen problemlos. Die Methode hat auch noch den Vorteil dass man den Stick unter Windows erstellen kann und nicht unbedingt eine Linux-Installation zur Hand haben muss (was die Anleitung von VMware zwingend voraussetzt).

Update 07.10.2013

Mit Version 5.5 vom ESXi funktioniert diese Methode bei mir leider nicht mehr.

Windows Key mit anderer Sprache verwenden

Mit dem Einbau einer SSD stand bei meinem Laptop auch eine Neuinstallation von Windows 7 an. Da ich mich im Büro mittlerweile an ein englisches Windows gewöhnt habe, und die Vorteile eigentlich nicht mehr missen möchte, dachte ich mir ich probiere mal aus ob der Lizenzschlüssel von meiner deutschen Installations-DVD auch mit einem englischen Windows 7 funktioniert.

Windows Key mit anderer Sprache verwenden weiterlesen

Linux-System auf neue Festplatte kopieren

Mal wieder ein Artikel als Erinnerung für mich, damit ich mir das nächste Mal nicht wieder alles zusammen suchen muss.

Beide Festplatten anschließen und von Linux-CD/USB-Stick booten. mit fdisk -l nachschauen welche Platten die richtigen sind (in meinem aktuellen Fall sda und sdc). Zielplatte partitionieren. Linux-System auf neue Festplatte kopieren weiterlesen

Domain Controller remote über MMC verwalten

Heute habe ich mir auf meinem lokalen Rechner mit Windows 7 die “Remote Server Administration Tools for Windows 7” installiert um damit direkt auf unsere Domain Controller zugreifen zu können ohne jedes Mal erst eine RDP-Verbindung aufmachen zu müssen. Das ganze war eigentlich nicht sonderlich kompliziert, aber auch nicht wirklich offensichtlich, daher hier die Zusammenfassung.

Domain Controller remote über MMC verwalten weiterlesen

Bestellung bei Otto [Update #3]

Eigentlich Off-Topic, aber ich will das trotzdem irgendwo zusammenfassen. Vorgestern Abend wollte ich bei Otto Office einen neuen Schreibtischstuhl bestellen. Der Stuhl, den ich schon getestet hatte und auf dem ich sehr gut saß, war dort mit Abstand am günstigsten, also ließ ich mich auch nicht sofort davon abschrecken dass die Bestellung nicht ging.

Bestellung bei Otto [Update #3] weiterlesen

Windows-Programme mit Ninite auf dem aktuellen Stand halten

Ninite ist ein fantastisches Programm zum schnellen installieren von Programmen. Man wählt die gewünschten Programme aus, lädt eine kleine .exe-Datei herunter, startet sie, und schon werden alle Programme herunterladen und installiert, dabei braucht man sich keine Sorgen um Spyware, Crapware, Toolbars oder ähnliches machen.

Was nicht so offensichtlich ist: Ninite kann auch updaten. Windows-Programme mit Ninite auf dem aktuellen Stand halten weiterlesen

The server is unwilling to process the request

Manchmal hasse ich Active Directory. Und manchmal habe ich das Gefühl, das beruht auf Gegenseitigkeit. Zwei Tage habe ich jetzt versucht herauszufinden wieso meine Scripte, die einen Benutzer-Account anlegen beim setzen von Attributen abbricht. Alles was der Domain Controller dazu zu sagen hat, ist:

The server is unwilling to process the request.

Irgendwann habe ich mehr durch Trial und Error herausgefunden dass er sich weigert die primaryGroupID des Users zu setzen, allerdings nicht warum. Die Auflösung kam mehr durch Zufall in diesem Tipp: Es existierte bereits ein anderer Account mit dem gleichen Namen in einem anderen Ast. Weitere Nachfragen ergaben dann: Es handelte sich um die selbe Person, der Account hätte gar nicht neu angelegt werden müssen, nur umgezogen.

Wieder mal einige Stunden Arbeitszeit verschwendet.