Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
3 Minuten Lesezeit (638 Worte)

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

 

Binärdateien einlesen und Base64-Codieren mit Powe...
Powershell-Skriptmodule erstellen

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Sonntag, 19. Mai 2024

Sicherheitscode (Captcha)