Powershell sudo

Ein Problem, das unter Powershell immer wieder auftritt: Man ist als Admin angemeldet, aber die Powershell Konsole startet im nicht privilegierten Modus. Man muss diese mit dem Zusatz “Run as Administrator” starten. Dann aber hat man sein Userprofil nicht mehr zur Verfügung. Zum Beispiel Shares. Es gibt aber die Möglichkeit einen “sudo” Befehl wie in Unix/Linux Systemen zu definieren.

Hier ein Codeschnipsel von Peter Provost auf Poshcode.org.

function elevate-process

{
$file, [string]$arguments = $args;
$psi = new-object System.Diagnostics.ProcessStartInfo $file;
$psi.Arguments = $arguments;
$psi.Verb = "runas";
$psi.WorkingDirectory = get-location;
[System.Diagnostics.Process]::Start($psi);
}

set-alias sudo elevate-process;

Diesen Code muss man dem persönlichen Profile Script zufügen.

Links

PowerCLI: Easy Migration Script

Einen Datastore leeren kann eine sehr mühsame Arbeit sein. Man kann zwar mehrere VMs gleichzeitig auswählen, aber diese müssen im selben Ressourcepool sein damit man sie gemeinsam verschieben kann. Das ganze wird zum Klickdrama. Viel schöner wäre es, wenn man diesen Vorgang mittels PowerCLI automatisieren könnte. Zu meiner Freude fand ich genau so ein Skript. Es basiert auf einer Programmierung von ict-freak.nl und wurde von Richard Yaw erweitert. Die Programmierung basiert auf der PowerCLI und wurde mit einer einfachen GUI ausgestattet.

Download

Easy Migration Tool v2.1 by Richard Yaw

Folgende vMotion Operationen können durchgeführt werden:

  • Host to Host
  • VM to Host
  • Datastore to Datastore
  • VM to Datastore

Bei der Datastore to Datastore Migration kommt als erfreulicher Nebeneffekt hinzu, daß die VMs nacheinander migriert werden und somit das Plattensubsystem nicht unnötig belasten.

Man startet das Skript über die PowerCLI. Es öffnet sich die GUI und man muß nur den vCenter Hostnamen eingeben, den Cluster auswählen und den vMotion Modus festlegen (vgl. oben).

Die Version ist schon etwas älter, funktioniert aber auch unter vSphere 5.1 noch zuverlässig.

So kann man auch größere Datastores über Nacht oder über das Wochenende leeren lassen. 🙂

Links

Powershell Skript mit Verknüpfung starten

Manchmal wäre es sinnvoll, ein Powershellskript direkt über eine Verknüpfung zu starten.Führt man einen Doppelklick auf diese Verknüpfung aus, so startet entweder Notepad, oder ein anderer installierter Skripteditor. Das Skript selbst wird nicht ausgeführt.

Damit das dennoch klappt muß die Verknüpfung etwas modifiziert werden. Unter Eigenschaften > Verknüpfung > Ziel muß folgendes angegeben werden:

powershell.exe -Command "& '<Pfad>'"

Hierbei muß <Pfad> ersetzt werden mit dem absoluten Pfad zum Skript.

Beispiel:

powershell.exe -Command "& 'D:\Skripte\test.ps1'"

Man beachte, daß der Pfad in Hochkommas gesetzt ist und der gesamte Ausdruck hinter -Command in Anführungszeichen. Die Anführungszeichen geben eine Zeichenfolge an, und der Aufrufoperator (&) verursacht die Ausführung des Befehls.

Weitere Parameter für die Ausführung wie z.B.

Weitere Links zum Thema:

Microsoft TechNet: PowerShell.exe-Konsolenhilfe

 

Backup Exec Job nach Veeam Backup starten

Die zeitliche Abstimmung zwischen Veeam Backup und Bandsicherung ist wichtig, damit nicht die Bandsicherung startet, während die Veeam Sicherung noch im Gange ist. Eine Möglichkeit besteht darin, ein möglichst großes Zeitfenster zwischen beiden Vorgängen einzubauen. Oft ist aber diese Zeit nicht vorhanden. Alternativ dazu kann man den BackupExec Job unmittelbar aus dem Veeam Auftrag heraus starten. Hier hat sich seit Version 2012 einiges geändert. Daher schildere ich beide Vorgehensweisen für BE 2010 und BE 2012.

Backup-Exec 2010

Hilfreich ist hier das CLI Tool bemcmd.exe. Bei einer Standardinstallation befindet es ich im Verzeichnis:

“c:\Program Files\Symantec\Backup Exec\bemcmd.exe”

Der Aufruf des BE Sicherungsjobs erfolgt mit der Kommandosequenz

"c:\Program Files\Symantec\Backup Exec\bemcmd.exe" -o1 -j<JobName>

Hierbei ist JobName der Name des BE Sicherungsjobs (ohne <>). Ihm voran wird ein kleines J ohne Leerzeichen gestellt. Der Parameter -o1 (O, nicht Null). Eine ausführliche Zusammenfassung der Befehlsparameter wurde von Arne Fokkema (ICT-Freak NL)  unter diesem Link bereit gestellt.

Der BEMCMD Befehl wird wie oben dargestellt in den Eigenschaften des Veeam Jobs eingetragen.

 Backup-Exec 2012

Symantec hat seine aktuelle Version von Backup Exec ordentlich umgepflügt und einige Neuerungen eingeführt. Neben optischen Änderungen fällt auf, daß das CLI Tool bemcmd.exe nicht mehr existiert. Statt dessen gibt es ein Powershell Plugin BEMCLI. Man kann die Shell entweder direkt aufrufen mit:

c:\Program Files\Symantec\Backup Exec\CLILauncher.exe

..oder man startet sie indirekt über Powershell. Dann muß allerdings das BEMCLI Modul eingebunden werden. Das geschieht in der Powershell mit dem Import-Module Befehl.

Import-Module bemcli

Danach lassen sich BEMCLI Befehle in Powershell ausführen. Eine Ausführliche Dokumentation der BEMCLI Befehle gibt es bei Symantec.

Befehl aus Veeam Auftrag starten

Job bearbeiten und im Abschnitt Storage (Veeam 6) auf Advanced klicken.

Das vollständige Kommando ist unten aufgeführt, wobei “<JobName>” ersetzt wird durch den Namen des Sicherungsauftrages. Z.B. “myBEJob”.

Achtung! Der Jobname in der GUI kann vom internen Jobnamen abweichen, wenn diese Jobs von einer früheren Version von BackupExec importiert wurden. Dann wird dem Namen intern das Suffix -Backup hinzugefügt. Aus dem Namen in der GUI “MyDailyJob” wird intern “MyDailyJob-Backup”. Der reale Name des Jobs lässt sich an der Powershell abfragen.

PS> import-module BEMcli
PS> Get-bejob

Der dort angezeigte Jobname wird im Befehl unten als “myBEJob” verwendet.

powershell.exe -command "&{import-module bemcli; get-bejob -Name "myBEJob" | start-bejob -confirm:$false}"

Die Poweshell Parameter sind im Microsoft TechNet dokumentiert. Innerhalb der geschweiften Klammern {} kann eine Serie von Befehlen stehen. Sie müssen lediglich durch ein Semikolon getrennt werden.

Der Parameter -confirm:$false hinter dem start-bejob Befehl ist unbedingt notwendig, da ansonsten eine Benutzereingabe zur Bestätigung des start-bejob Befehls verlangt wird.