Tipps

Virtuelle Festplatten (vhdx) als Datencontainer verwenden - nicht nur für VMs

Virtuelle Festplatten (Vhdx-Dateien) in Windows sind sehr praktisch. Man kann Sie nämlich nicht nur für virtuelle Maschinen verwenden, sondern auch als universelles Containerformat, um Daten zu transportieren oder sogar, um Windows aus einer VHD-Datei zu booten (s. https://www.netz-weise-it.training/weisheiten/tipps/item/377-boot-von-vhd-auf-einem-leeren-datentraeger-einrichten.html). Das Erstellen einer VHD-Datei ist allerdings etwas mühselig, weil man erst die Datei erstellen, dann einrichten und anschließend eine Partition erstellen muss. Da man das aber auch mit Powershell erledigen kann, und ich dieses Feature sehr oft verwende, habe ich eine kleine Funktion dafür geschrieben. 

#requires -Modules Hyper-V, Storage -RunAsAdministrator

function Get-Freedrive
{
<#
  .SYNOPSIS
  Get-Freedrives lists the first free driveletter in the alphabet.
  .DESCRIPTION 
  Get-Freedrive can be used to test for the first available free driveletter. The Parameter $inverse searches backwards through the alphabet.
  .EXAMPLE
  get-freedrive -inverse -startLetter Z
  Starts the search with letter z searching backwards. Returns a character.
  .NOTES
  Version: 1.0
  Author: Holger Voges
  Date: 2018-08-17
  www.netz-weise-it.training/weisheiten/
#>

[cmdletbinding()]
param(
  # The letter to start the search from - default is C or Z, if -inverse is chosen
  [char]$startLetter = 'C',

  # Inverse forces a backwards search through the alphabet
  [switch]$inverse

)


  # Setting Start-Letter to Z when using inverse Search
  If ( -not ( $PSBoundParameters.ContainsKey('Startletter') ) -and ( $inverse ) )
  { $startLetter = 'Z' }

  [int]$Counter = ([Convert]::ToByte( $startLetter ))
  if ( $inverse )
  { $Chararray = $Counter..67 } 
  Else { $Chararray = $Counter..90 }
  $drives = Get-PSDrive -PSProvider FileSystem
  foreach ( $letter in $CharArray )
  { 
    if ( [Char]$letter -notin $drives.Name )
    {
      [char]$letter
      break
    }
  }
}

Function New-ContainerVHD
{
<#
  .SYNOPSIS
  Creates a new VHD-Container-File
  .DESCRIPTION
  This Function Creates a VHD-File, creates a partition and formats it with ntfs. The Drive
  is mounted afterwards.
  .EXAMPLE
  Create a new VHDX-File as a 500GB Differencing File and mount it as X:
  New-ContainerVHD -Path D:\Sourcen.vhdx -DriveLetter X

  .EXAMPLE
  Create a new VHDX-File as a 100GB Differencing File and mount it as X: with a label Isos
  New-ContainerVHD -Path D:\Sourcen.vhdx -DriveLetter X -Label isos

  .NOTES
  Version: 1.0
  Author: Holger Voges
  Date: 2019-04-26
  www.netz-weise-it.training/weisheiten/
#>
param(
  # The Path for the Container-VHD
  [Parameter(Mandatory=$true)]
  [string]$Path,

  # The Driveletter the Drive is mounted to
  [ValidateScript({ if ( $_ -in (( Get-PSDrive ).Name ))
                             { Throw "$_ is already used" }
                             $true
                          })]
  [Char]$DriveLetter = 'M',

  # The Size of the Disk in Bytes. Minimum is 100MB, Maximum is 64TB.
  [ValidateRange(104857600,70368744177664)]
  [int64]$SizeBytes = 500GB,

  # The Name which will be shown in the File-Explorer
  [ValidateLength(1,32)]
  [String]$FileSytemLabel = 'Data'
)

  $vhd = New-VHD -Path $Path -SizeBytes $SizeBytes | Mount-VHD -Passthru
  $disk = $vhd | Initialize-Disk -PartitionStyle GPT -PassThru
  $part = $disk | New-Partition -UseMaximumSize
  $part | Format-Volume -FileSystem NTFS -NewFileSystemLabel $FileSytemLabel -Confirm:$false
  Set-Partition -DiskNumber $vhd.Number -PartitionNumber $part.PartitionNumber -NewDriveLetter $DriveLetter
}

Sie können die beiden Funktionen in einer Skriptdatei ausführen und anschließend über New-ContainerVHD speichern. Alternativ können Sie die Skriptdatei auch einfach als Modul speichern. Wie das geht beschreibe ich im Artikel Ein Powershell Skriptmodul erstellen

Beachten Sie, dass das Skript nur dann funktioniert, wenn Sie Hyper-V installiert haben und eine administrative Powershell-Konsole verwenden. Hyper-V können Sie ab Windows 8 in der Professional-Version und aufwärts einfach nachinstallieren. Verwenden Sie hierfür das Kommando

Install-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -online

 


 731,    03  Mai  2019 ,   Tipp
Holger Voges

  E-Mail Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

Holger Voges ist Inhaber der Firma Netz-Weise IT-Training und seit 1999 als Trainer und Consultant tätig. Als Allrounder in den Bereichen Windows Server, Active Directory, SQL Server, Hyper-V und Windows PowerShell, hat er in der Vergangenheit zahlreiche Einsätze als Consultant in namenhaften Firmen absolviert und so neben der Theorie auch umfangreiche praktische Erfahrungen gesammelt.

 

Netz-Weise

Das Haupt-Tätigkeitsfeld von Netz-Weise sind Schulungen für Profis. Bei uns bekommen Sie das Programm für den fortgeschrittenen Praktiker, der die Tiefen des Systems ausloten möchte genauso wie Standard-Schulungen.

So erreichen Sie uns:

Netz-Weise
IT-Training und Beratung
Freundallee 13a
30173 Hannover
 
Tel: (0511) 165 925-0
Fax: (0511) 165 925-99
email: info(at)netz-weise.de
 

Newsletter bestellen

Das Wichtigste kompakt ins E-Mailfach!