PowerShell 5.0 – die erste Preview ist da

Seit gestern ist die erste Preview des Windows Management Framework 5.0 verfügbar, die auch eine PowerShell 5.0 umfasst:

http://www.microsoft.com/en-us/download/details.aspx?id=42316

Das Tempo mit dem Microsoft neue Versionen “raushaut” ist natürlich etwas irritierend (die Version 4.0 kam mit Windows 8.1 und ist damit erst seit Oktober letzten Jahres offiziell und damit lediglich ein paar Monate alt). Natürlich gibt es dafür Gründe. Microsoft drückt auf das Tempo weil es im Cloud-Geschäft um sehr viel geht und die Cloud-Plattform Azure beinahe im Wochenrythmus um neue Dienste erweitert wird. Einer dieser Dienste ist die Verwaltbarkeit virtueller Maschine und da kommt die PowerShell mit DSC (Desired State Configuration) ins Spiel, das vor kurzem noch einmal überarbeitet und erweitert wurde – daher die neue Version.

Eine weitere interessante Neuerung, die nichts mit DSC, aber mit Verwaltbarkeit von Servern zu tun hat, ist ein auf Nuget und Chocolatey basierender Paketmanager für die Installation beliebiger Anwendungen. Dieser wird über eine Reihe von Cmdlets in einem Modul mit dem Namen “OneGet” zur Verfügung gestellt.

Ob das Windows Management Framework 5 als Bestandteil des Nachfolgers von Windows Server 2012 R2 oder “out of band” veröffentlicht werden soll, wurde von Jeffrey Snover noch nicht verraten.

Wer die Preview ausprobieren möchte (viel zu sehen gibt es nicht, aber der Paketmanager ist  interessant) benötigt ein englisches Windows 8.1.

PowerShell 5 Preview

Die erste Preview der PowerShell 5 als Teil des Management Framework 5 ist da

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

PowerShell-Konferenz in Oberhausen am 7. und 8. Mai

Die zweite deutschsprachige PowerShell-Konferenz findet am 7. und 8. Mai in Oberhausen statt. Die Liste der Vorträge umfasst viele interessante Themen aus einem breiten Themenspektrum. Organisiert wird die Konferenz von PowerShell MVP Tobias Weltner in Zusammenarbeit mit IT-Visions. Ich werde vorausichtlich mit zwei Vorträgen vertreten sein:

>Die PowerShell als Webserver
>Ps1-Skripte in Exe-Dateien einbetten

Dieses Mal liegt der Schwerpunkt eindeutig auf Praxis und weniger auf den Grundlagen wie im letzten Jahr.

Weitere Infos und vor allem die Möglichkeit zur Anmmeldung gibt es hier:

http://pscommunity.de/powershell-konferenz/powershell-konferenz-2014-in-oberhausen/

Wer teilnehmen möchte, sollte nicht zu lange warten, denn aufgrund einer größeren Messe in der Region gibt es bereits wenige Hotelzimmer. Neben sehr viel PowerShell-Know how aus der Praxis, einem netten Abendprogramm ist vor allem die Gelegenheit sich mit anderen Anwendern austauschen zu können der Hauptgrund, um an der Konferenz teilzunehmen. Oberhausen ist gut zu erreichen und bietet mit dem Centro (ganz in der Nähe zum Konferenzort), dem Gasometer und einem Indudstriemuseum einige Sehenswürdigkeiten (vom rauhen Charm des Ruhrgebiets einmal abgesehen).

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Create a Hyper-V VM with a new hard drive and an ISO file

Creating a new Hyper-V was always easy thanks to the New-VM-Cmdlet. But what you often really want is a new VM that is ready to install a new Windows version. Thanks to the new Mount-VHD-Cmdlet that comes with Windows 8.1 and Windows Server 2012/R2 (I am not sure if it was part of Windows 8 already) creating a new Vhdx drive with a formatted file system becomes easy to (before that I had to start the VM and connect to it with PowerShell Remoting and WMI so send the commands that would to the initializing and formatting).

Here is a function that takes a few parameters and will create a new VM, sets up a hard drive and connects a another drive with an ISO file so that Windows will install right after the VM boots.

As I wrote earlier the function will run only on Windows Server 2012/R2 or Windows 8.1.


function New-PersonalVM
{
    [CmdletBinding()]
    param([String]$VMName="TestVM",
          [String]$VhdxPath,
          [Long]$VhdxSizeGB=(&{20GB}),
          [String]$ISOPath ,
          [String]$SwitchName,
          [Int]$MemoryMB=768,
          [Switch]$StartVM
         )
    $NewVhd = New-VHD -Path $VhdxPath -SizeBytes $VhdxSizeGB -Dynamic
    # mount the Vhdx file as a drive
    Mount-VHD -Path $VhdxPath
    $NewDisk = @(Get-Disk | Where-Object { $_.PartitionStyle -eq "RAW"  -and $_.Size -eq $VhdxSizeGB })
    if ($NewDisk.Count -ne 1)
    {
        Write-Warning "Can't find the freshly created drive - script will end."
        break
    }
    $DiskNumber = $NewDisk.Number
    Initialize-Disk -Number $DiskNumber -PartitionStyle MBR
    $NewPart = New-Partition -DiskNumber $DiskNumber -UseMaximumSize -AssignDriveLetter
    Format-Volume -DriveLetter $NewPart.DriveLetter -FileSystem NTFS -NewFileSystemLabel NewVol -Confirm:$False | Out-Null
    Dismount-VHD -DiskNumber $DiskNumber
    $VM = New-VM -Name $VMName -VHDPath $VhdxPath-SwitchName $SwitchName -MemoryStartupBytes ($MemoryMB*1MB) -BootDevice CD
    Add-VMDvdDrive -VMName $VMName -Path $ISOPath | Out-Null
    if ($PSBoundParameters.ContainsKey("StartVM"))
    {
        Start-VM -Name $VMName
    }
}

Here is an example for calling the function, I’ll provide the path for the Vhdx file to be created and the path of the ISO file containing the image to install:

$VhdxPath= "J:\VHDX\Win2012R2_B.vhdx"
$ISOPath= "J:\ISO\de_windows_server_2012_r2_x64.iso"

New-PersonalVM -VMName Server2 -VhdxPath $VhdxPath -ISOPath $ISOPath -SwitchName VSwitch1 -StartVM

With the help of that function setting up a few VMs with Windows Server 2012 R2 took only a few minutes.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Frohe Weihnachten

Wie schnell doch ein Jahr vergeht  - es kommt mir so vor als hätte ich meine Weihnachtswünsche 2012 vor kurzem erst geschrieben.

Das zu Ende gehende Jahr ging etwas zu schnell vorbei. Es gab wie immer positive und weniger positive Momente, die Letzteren überwiegen und darauf kommt es (unter anderem) an. Bezogen auf die IT-Branche war es, soweit ich es beurteilen kann, ein gutes Jahr. Das wird sicherlich jeder bestätigen, der beruflich in der IT-Branche tätig ist. Speziell Microsoft sorgt dafür, dass es nicht langweilig wird.

Ich wünsche allen Lesern dieses Blogs , meiner Bücher (Anfang nächsten Jahres kommen nach längerer Zeit wieder zwei neue dazu) und den Teilnehmern meiner PowerShell-Schulungen frohe und friedliche Weihnachtsfeiertage und einen guten Start ins neue Jahr 2014. Eventuell sehen wir uns auf der PowerShell-Konferenz im Mai im Oberhausen

Ihr,
Peter Monadjemi

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Neues (deutschsprachiges) PowerShell-Community-Portal

Seit kurzem (Ende Oktober) gibt es ein neues deutschsprachiges PowerShell-Community-Portal:

http://www.powershell-group.eu/

Gegründet wurde es von der PowerShell User Gruppe in Hannover. Hinter dem Portal steht PowerShell-Experte Peter Kriegel (aka “Power Pete”),  der die Fragen der PowerShell-Anwender beantwortet. Aber grundsätzlich kann jeder mitwirken und sich als PowerShell-Experte im Rahmen des Portals präsentieren.

Nach dem auf http://www.powershell-ag.de/ offenbar schon seit längerem nicht mehr allzu viel passiert, ist es erfreulich, dass jemand einen Neustart eines deutschssprachigen PowerShell-Portals probiert. Einfach wird es sicher nicht, denn ein Portal zu betreiben erfordert sehr viel Zeit und Energie und die Mitwirkung anderer, die das Portal mit Leben füllen. Die Bereitschaft selber aktiv zu werden anstatt nur Inhalte zu “konsumieren” hat aus meiner Erfahrung in den letzten Jahren nicht gerade zugenommen. Es wäre daher wünschenswert, wenn sich das neue Portal in der deutschsprachigen Community etablieren kann.

Optisch macht das Portal schon einmal sehr guten Eindruck. Ich bin ja wirklich überrascht wie groß die Ähnlichkeit zu einer offiziellen Microsoft-Seite in der neuen “Windows 8-Optik” gelungen ist;)

 

Veröffentlicht unter Allgemein | 1 Kommentar

WMI Explorer 2014 (bis 31.12.2013 kostenlos)

Den WMI Explorer von Sapien gibt es in einer neuen Version. Auch wenn ich kein allzu großer Anhänger kommerzieller Tools bin, die, zieht man ein paar Extras ab, nicht mehr bieten als frei verfügbare Tools (in diesem Fall CIM Studio aus dem WMI SDK von Microsoft, das Teil des großen Windows SDKs, oder das WMI-Explorer-Skript, das inzwischen in der Script Gallery im TechNet-Portal zu finden ist), macht das Tool optisch und funktional einen guten Eindruck. Es ist vor allem sehr schnell. Zum Kennenlernen von WMI ist der WMI Explorer sehr gut geeignet.

Bis zum 31.12.2013 ist das Tool noch kostenlos erhältlich:

http://www.sapien.com/blog/2013/07/29/introducing-the-wmi-explorer-2014/

Wie immer ist es eine Registrierung erforderlich.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

LastAccessTime oder LastWriteTime?

Im Grunde ist es ja ganz einfach:

>LastWriteTime – Zeitpunkt, an dem eine Datei das letzte Mal geschrieben wurde

>LastAccessTime  - Zeitpunkt, an dem eine Datei das letzte Mal angesprochen wurde

Ein


Set-Content -Path Test1.dat -Value "Aha"

schreibt die Datei und setzt LastWriteTime und LastAccessTime auf denselben Wert.

Ein


Get-Content -Path Test1.dat

sollte demnach dazu führen, dass sich der Wert von LastAccessTime ändert. Dass dies bei neueren Windows-Versionen (ab Vista) aber nicht mehr passiert (und was etwas irritierend sein kann) liegt an einem Registry-Eintrag mit dem Namen NtfsDisableLastAccessUpdate im Schlüssel  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem. Ist der Wert 1, wird die LastAccessTime nicht aktualisiert, ist der 0 wird er es. Im Allgemeinen ist es auch sinnvoll, dass dieser Wert nicht bei jedem Lesezugriff aktualisiert wird. Ändert man Wert, ändert sich auch das Verhalten von LastAccessTime.

Veröffentlicht unter Allgemein, Tipps | Hinterlasse einen Kommentar

Get-Hotfix “fixed”

Auch bei der PowerShell 4.0 gibt das Get-Hotfix-Cmdlet für die InstalledOn-Eigenschaft nur dann einen Wert aus, wenn sich das Datum im en-US-Format korrekt darstellen lässt – ein 20.3.2013 führt zu einem Fehler, da es einen 3. 20ten nicht gibt. Möchte man in einer “deutschsprachigen” PowerShell eine Ausgabe für InstalledOn, muss man nur die Konvertierung selber durchführen, was ab der PowerShell 3.0 dank des erweiterten Update-TypeData-Cmdlets relativ einfach ist:


$SB = { ([DateTime]$this.psBase.properties["InstalledOn"].Value).ToString("d",
 (New-Object Globalization.CultureInfo "de-De")) }

Update-TypeData -MemberType ScriptProperty -MemberName InstallDate -Value $SB `
-TypeName System.Management.ManagementObject#root\cimv2\Win32_QuickFixEngineering

Get-HotFix | Select-Object -Property HotfixID, InstallDate

 

Veröffentlicht unter Allgemein, Tipps | Hinterlasse einen Kommentar

Neues zur PowerShell-Hilfe

Der Umstand, dass es die Hilfe zur PowerShell 3.0 nur auf Englisch gab bzw. immer noch gibt, vor allem, die Umwege, die man gehen muss, um zu mindestens mit der englischen Hilfe überhaupt eine Hilfe per Get-Help zu erhalten, war eine Zeit ein “Aufregerthema” in der deutschsprachigen Community. Inzwischen hat sich die Lage entspannt. Die PowerShell-Hilfe gibt es zwar immer noch nicht auf Deutsch, ein


Update-Help

aktualisiert die Hilfe ohne weitere Angaben auch auf einem deutschsprachigen Windows mit den englischen Texten (an die man sich auch gewöhnt). Die PowerShell muss nach wie vor als Administrator gestartet werden, damit auch die Hilfe zu den “Kernmodulen” aktualisiert wird.

Was sich genau geändert hat kann ich leider nicht beurteilen (offenbar ist ein internes Update zuständig). Aber manchmal möchte man es gar nicht im Detail wissen. Hauptsache, es funktioniert.

Veröffentlicht unter Allgemein, Tipps | Hinterlasse einen Kommentar

Kleine Tipps für Zwischendurch – Skripts aus der ISE-Befehlszeile laden

Der folgende kleine Tipp zeigt, wie man aus der Befehlszeile der ISE 3.0 eine Datei in die ISE lädt und dazu nicht über das Menü gehen muss. Grundlage ist die Variable $PSISE, die die ISE als Objekt repräsentiert.


# Lädt eine Datei aus dem Befehlsfenster der ISE in die ISE
function AddISE
{
    param([String]$Filename)
    $Path = Join-Path -Path (Get-Location).Path -Child $Filename
    $PSISE.CurrentPowerShellTab.Files.Add($Path) | Out-Null
}
Veröffentlicht unter Tipps | Hinterlasse einen Kommentar