Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

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

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

    }

  }

}

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

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Donnerstag, 21. November 2024

Sicherheitscode (Captcha)