netzweise2

Freie Laufwerke finden mit Powershell

Zum Vergeben eines Laufwerksbuchstaben muß man zuerst einmal evaluieren, welchen Laufwerksbuchstabe frei ist. Es gibt eine Reihe Ansätze, aber dieser hier ist für Lernzwecke ganz interessant. Die folgende Funktion wandelt die Asciicodes der Buchstaben C (Ascii 67) bis Z (Ascii 90) in Buchstaben um. Die Buchstaben werden der Reihe nach in einer Foreach-Schleife mit Test-Path gegen die vorhandenen Pfade überprüft. Sobald Test-Path False zurück gibt, wird die Schleife per "break" abgebrochen und der gefundene Buchstabe zurück gegeben. 

Interessant in diesem Zusammenhang ist auch die Invertierung der Suche. Um beim letzten Buchstaben zu beginnen, wird einfach der Startbuchstabe auf Z gesetzt und die Auflistungsreihenfolge umgedreht ( $Counter..67 bzw. $Counter..90). Allerdings ist der Default-Wert für den Startbuchstaben auf C gesetzt, so dass eine Invertierung der Suche ohne setzen des Startbuchstabens normalerweise kein Ergebnis liefert. Eine Lösung bietet die automatische Variable $PSBoundParameter. Diese Variable wird automatisch erstellt, wenn beim Aufruf einer Funktion Übergabeparameter vom Benutzer verwendet werden. Die Methode Containskey() überprüft, ob ein Parameter vorhanden ist oder nicht. 

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

      Place additional notes here.

      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

  )

  # Legt bei inverser Suche den Startletter auf Z fest, wenn kein Startbuchstabe angegeben wurde.

  If ( -not ( $PSBoundParameters.ContainsKey("Startletter") ) -and ( $inverse ) )

    { $startLetter = 'Z' }

  #

  [int]$Counter = ([Convert]::ToByte( $startLetter ))

  if ( $inverse )

    { $Chararray = $Counter..67 }

  Else { $Chararray = $Counter..90 }

  foreach ( $letter in $CharArray )

  {

    if ( -not ( Test-Path -Path ( [Char]$letter + ':\')))

    {

      [char]$letter

      break

    }

  }

}

×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

Die Existenz einer OU testen mit Powershell
Powershell-Skripte ausführen trotz Applocker und A...

Related Posts

 

Comments

No comments made yet. Be the first to submit a comment
Already Registered? Login Here
Freitag, 19. September 2025