Browsed by
Schlagwort: PowerShell

Support für ältere OS im Hyper-V 2012

Support für ältere OS im Hyper-V 2012

In den letzten Tagen habe ich an mehreren Diskussionen zum Thema „Support für ältere OS“ geführt/miterlebt.
Gab es unter Windows Server 2008 R2 noch die Möglichkeit im Hyper-V Manager den entsprechenden Haken zu setzen, so fehlt dieser unter Windows Server 2012.

cpu_settings_gui

Hier ist, wie im Bild zu sehen, nur noch die Möglichkeit den Support für eine andere CPU-Version einzustellen.
Möchte man, wie früher, auch auf den „altes OS Support“ zurückgreifen muss man die PowerShell nutzen. Dort findet man die gewünschte/gesuchte Einstellung wieder…
cpu_settings_ps
cpu_settings_gui

Hier habe ich ein kleines Script erstellt mit welchem man die fehlende Einstellung der GUI vornehmen kann.

Das Script habe ich ebenfalls im Microsoft Technet zum Download bereit gestellt: TechNet Gallery

IT Camp: Windows Server 2012 und Hybrid Cloud

IT Camp: Windows Server 2012 und Hybrid Cloud

So… morgen gehts nach Unterschleißheim zu Microsoft ins

IT Camp: Windows Server 2012 und Hybrid Cloud

Themen werden sein:
Hyper-V Server 2012
Windows Server 2012
System Center 2012 Client Management and Security Solutions
System Center 2012 SP1 Beta
System Center 2012 Private Cloud
Windows Azure

Da bin ich mal gespannt und freu mich auf morgen

Um die Linkliste zu komplettieren hab ich noch folgende Microsoft Virtual Academy (MVA) Kurs-Empfehlungen zur Vorbereitung auf die IT Camps bekommen:
Windows Server 2012: Erster Einblick
Windows PowerShell 3.0 für Einsteiger – Teil 1
System Center 2012: Virtual Machine Manager (VMM)
System Center 2012 Operations Manager

%20 mit Leerzeichen ersetzen

%20 mit Leerzeichen ersetzen

Wer kennt das Problem nicht, man lädt sich zB ein PDF-Dokument von einem Webserver und auf Grund der HTML-Konvertierung sind alle Leerzeichen im Dateiname mit %20 ersetzt worden.
Das ganze macht sich natürlich nicht schön auf dem Rechner da es die Lesbarkeit doch ein wenig erschwert.
Anbei ein Einzeiler für die Powershell welcher alle Dateien mit %20 im Dateinamen ausliest und mit einem Leerzeichen im Dateinamen ersetzt.
Wer keine Leerzeichen mag kann natürlich auch jedes beliebige Trennzeichen einsetzen 😉
Also zB ‚%20′,’_‘ für einen „Tiefstrich“.

Get-ChildItem -Filter *%20*.* | Rename-Item -NewName { $_.name -replace '%20',' ' }

Wer seine umzubenennenden Elemente nicht an einem Ort abgelegt hat kann den Get-ChildItem Befehl natürlich auf eine entsprechend globale Suche schicken…

Powershell v3 und ISE auf Windows 7 installieren.

Powershell v3 und ISE auf Windows 7 installieren.

Seit kurzem ist das Windows Management Framework 3.0 erhältlich welches neben der Powershell 3.0 auch ein Update für WMI und WinRM beinhaltet.
Den Download gibt es hier: Download Link Framework
Neben den Updates der PSProvider welche im Windows Management Framework enthalten sind gibt verlangen die Abhängigkeiten „natürlich“ vorher ein Update des .Net-Framework.
.Net Framework 4.0 gibt es hier: .Net 4.0

Anschließend startet dann eine völlig überarbeitete ISE und die PS 3.0
Schnell ein $Host.Version um die Versionsnummer zu überprüfen 😉

Viel Spass…

Howto get: SapienForms Community Edition

Howto get: SapienForms Community Edition

Immer wieder lese ich über die SapienForms Community Edition welche man frei, Frei wie in Freibier ( if you know what i mean), nutzen kann. Leider habe ich auf der Webseite www.sapien.com diese Version nie gefunden.

Besser hätte man dies auch nicht verstecken können, daher hier eine kurze Anleitung.

Über den Menüpunkt MySapien kommt man in den Loginbereich.

Hat man noch keinen Account kann man diesen kostenlos beantragen.

Die Bestätigungsmail kommt zügig und enthält einen Aktivierungslink.

Anschließend geht des dann in den Downloadbereich in dem man am besten nach PrimalForms suchen sollte um dann die PrimalFormsCE.exe und den QuickGuide (Using PrimalForms community Edition.pdf) herunterladen.

Eine Installationsanleitung spar ich mir an dieser Stelle denn das Installieren ist im Gegensatz zum Finden der Datei ein Kinderspiel 😉

 

asSecureString Übergabe an XenServer

asSecureString Übergabe an XenServer

Seit ein paar Tagen suche ich nach der Lösung dem XenServer ein Passwort zu übergeben welches ich vorab via Variable in einem PowerShell-Script abfrage.

Mein Problem war bis dato, dass ich mit dem Parameter -asSecureString zwar das Password wie gewollt unlesbar, da verschlüsselt wiedergegeben habe. Es wurde nicht nur optisch durch ***** ersetzt, sondern auch verschlüsselt in der Variablen gespeichert.

Gut für die Sicherheitsanforderungen! Schlecht für die geplante Übergabe an den XenServer, der verlangt nämlich ein Klartextpassword…

Folgende Möglichkeiten haben mich auf meiner suche begleitet:

Get-Credential hat das Password, wie auch bei – asSecureString verschlüsselt und nicht wieder im Klartext „freigegeben“.

Alternativ dazu gibt es die Möglichkeit dies mit der GetNetworkCredential() Methode anzugehen. Hierbei wird das Password dann in einer Tabelle im Klartext dem Usernamen zugeordnet.

Hierbei muss man allerdings ein wenig basteln um das Password als string (in Klartext) weiterverarbeiten zu können.

Nun bin ich bei meiner Suche auf folgenden Artikel gestoßen. Beschrieben wird eine „Sicherheitslücke“ in der Powershell:

http://www.leeholmes.com/blog/2007/01/25/powershell-credentials-and-getnetworkcredential/

Und dieser Hack hat mir eine einfache Möglichkeit geboten das Passwort verschlüsselt abzugreifen und innerhalb der Variablen kann ich das Passwort als Klartextwort.

Nun gilt es die Variable schnellstmöglich wieder, nach Gebrauch, zu löschen! Aber einen Tod muss man ja sterben… 😉

 

Xen-Server Updatescript v(0.)2 ;)

Xen-Server Updatescript v(0.)2 ;)

Nachdem ich es leid war jeden Befehl über das XE-Command an den XenServer zu übermitteln, habe ich mich versucht das Ganze in PowerShell Cmdlets zu packen.
Dank der passenden SDK von Citrix bekommt man ja einen ganzen Schwung Cmdlets für den XenServer geliefert 😉
Hier also mal mein erster Versuch das Script mehr zu nem PS-Script zu machen…

Import-Module ‚C:Program Files (x86)CitrixXenServerPSSnapInXenServerPSSnapIn.dll‘

Import-Module ‚C:Program Files (x86)CitrixXenServerPSSnapInXenServer.dll‘

$server = read-host „Servername“

$password = „root-password“

# Pfad zu den installierenden Updates!

# In diesem Ordner sollten NUR neu einzuspielende Updates liegen!!!

$pfad = “\FileserverShared_Folderxs_updates

#

#Start Script

#

Connect-XenServer -server $server -UserName root -Password $password

write-host „$server wird gepatched; die VMs werden heruntergefahren“ -foregroundcolor „green“

write-host „=======================================================“

Get-XenServer:VM | Where-Object { $_.is_a_template-eq $false-and $_.is_control_domain-eq $false} | foreach-object {Invoke-XenServer:VM.CleanShutdown -vm $_.name_label}

foreach ($update in Get-ChildItem $pfad)

{

write-host „$update wird vorbereitet“ -foregroundcolor „green“

Invoke-XenServer:Host.Disable -Host $server

Invoke-XenServer:Host.Reboot -Host $server

write-host „Server wird rebootet“ -foregroundcolor „green“

start-sleep -s 300

Connect-XenServer -server $server -UserName root -Password $password

write-host „$update wird hochgeladen“ -foregroundcolor „green“

xe.exe -s $server -u root -pw $password patch-upload file-name=$pfad$update | out-file $server“_uuid.txt“

$uuid_patch = get-content .$server“_uuid.txt“

write-host „$update wird installiert“ -foregroundcolor „green“

xe.exe -s $server -u root -pw $password patch-pool-apply uuid=$uuid_patch

write-host „$server erfolgreich mit $update gepatched“ -foregroundcolor „green“

write-host „=======================================================“

}

write-host „$server erfolgreich gepatched; letzter reboot“ -foregroundcolor „yellow“

Invoke-XenServer:Host.Disable -Host $server

Invoke-XenServer:Host.Reboot -Host $server

start-sleep -s 300

Connect-XenServer -server $server -UserName root -Password $password

Remove-Item .$server“_uuid.txt“

write-host „Die VMs werden wieder gestartet“ -foregroundcolor „green“

Get-XenServer:VM | Where-Object { $_.is_a_template-eq $false-and $_.is_control_domain-eq $false} | foreach-object {Invoke-XenServer:VM.Start -vm $_.name_label}

Disconnect-XenServer

Nun muss nur noch der Updateprozess selbst umgebaut werden…

Das benötigte SDK-Paket gibt es hier:
http://community.citrix.com/cdn/xs/sdks/
Und hier ein tolles Poster mit allen Befehlen 😉 Danke an die Jungs bei X-Tech:
http://www.x-tech.at/download_file.php?file=%2Ffiles%2FCitrix_XenServer_6.0_CmdLet_Poster.pdf
Und zum Schluss noch das Script als Zip-File:
https://docs.google.com/open?id=0B0kzgx7xeDmjQ29HZG5UcGdLMUU

Quick & Dirty XenServer patchen via Powershell

Quick & Dirty XenServer patchen via Powershell

Wenn man mehr als eine Hand voll XenServer als Standalone-Server, nicht im Pool gemanged, verwalten und patchen darf, hat man bestimmt so seine „Freude“ mit der GUI gesteuerten Updatefunktion im XenCenter.
Dies dauert meiner Meinung nach viel zu lang, da hierbei alle Patche nacheinander „Server-für-Server“ sukzessive durchgeführt werden.
Hierbei kommt es zu einer beträchtlichen Downtime der einzelnen VMs, welche für mich so nicht zumutbar erscheint.
Alternativ dazu kann man im XenCenter dieses Prozedere für jeden Server einzeln durchklicken, was allerdings recht schnell unübersichlich wird!

Anbei stelle ich ein kleines PowerShell-Script vor, welches pro Server eine Schleife durchläuft bis alle offenen Patche installiert sind.

Auch hier wird nur jedes Update der Reihe nach abgearbeitet. Allerdings kann man hierbei, übersichtlicher als in der GUI, für jeden Server einen eigenen Updateprozess starten.

Genug erzählt, hier ist das Script.
Alles was man benötigt ist ein installiertes XenCenter um das CommandlineTool xe.exe verfügbar zu haben und eine installierte Version der Powershell. Das Laden von speziellen Modulen ist nicht notwendig.

$server = read-host „Servername“
$password = read-host „root-Password“

# Pfad zu den installierenden Updates!
# In diesem Ordner sollten NUR neu einzuspielende Updates liegen!!!
$pfad = „
\FileserverShared_Folderxs_updates

#
#Start Script
#

write-host „$server wird gepatched; die VMs werden heruntergefahren“ -foregroundcolor „green“
write-host „=======================================================“
xe.exe -s $server -u root -pw $password vm-shutdown –multiple

foreach ($update in Get-ChildItem $pfad)
{
write-host „$update wird vorbereitet“ -foregroundcolor „green“
xe.exe -s $server -u root -pw $password host-disable
xe.exe -s $server -u root -pw $password host-reboot
write-host „Server wird rebootet“ -foregroundcolor „green“
start-sleep -s 180
write-host „$update wird hochgeladen“ -foregroundcolor „green“
xe.exe -s $server -u root -pw $password patch-upload file-name=$pfad$update | out-file $server“_uuid.txt“
$uuid_patch = get-content .$server“_uuid.txt“
write-host „$update wird installiert“ -foregroundcolor „green“
xe.exe -s $server -u root -pw $password patch-pool-apply uuid=$uuid_patch
write-host „$server erfolgreich mit $update gepatched“ -foregroundcolor „green“
write-host „=======================================================“
}
write-host „$server wurde gepatched; letzter reboot“ -foregroundcolor „yellow“
xe.exe -s $server -u root -pw $password host-disable
xe.exe -s $server -u root -pw $password host-reboot
start-sleep -s 180
xe.exe -s $server -u root -pw $password host-enable
Remove-Item .$server“_uuid.txt“
start-sleep -s 120
write-host „Die VMs werden wieder gestartet“ -foregroundcolor „green“
xe.exe -s $server -u root -pw $password vm-start –multiple

Script kann alternativ auch hier heruntergeladen werden:
https://docs.google.com/open?id=0B0kzgx7xeDmjWkFOa21JNXR0Tkk

Viel Spass beim ausprobieren!

%d Bloggern gefällt das: