Ronnys Blog Die Antwort lautet immer noch 42

Confirm und WhatIf

20 Januar, 2020

Mit Hilfe von [CmdletBinding()] lassen sich die Standardparameter von Powershell einbinden.

Möchte man die Parameter WhatIf und Confirm verwenden, muss man beim CmdletBinding Werte übergeben

Whatif

Beispielfunktion:

function HelloWorld{
  [CmdletBinding(SupportsShouldProcess=$True)]
  param(
    [Parameter(Mandatory=$True)][System.String]$Greeting
  )
  begin{}
  process{
    if ($PSCmdlet.ShouldProcess($Greeting, "Parameter ausgeben")){
      Write-Host $Greeting;
    }
  }
  end{}
}

Diese Beispielfunktion gibt den String aus, den man mit dem Parameter **Greeting** übergibt. Beispiel:

PS C:\Powershell> HelloWorld -Greeting "Bon Jour!"
Bon Jour!

PS C:\Powershell> HelloWorld -Greeting "Bon Jour!"
Bon Jour!

Wenn man jetzt den Parameter WhatIf übergibt, führt die Powershell den Befehl nicht aus, sondern beschreibt, was wir zuvor angegeben haben:

PS C:\Powershell> HelloWorld -Greeting "Hallo!" -WhatIf
What if: Performing the operation "Parameter ausgeben" on target "Hallo!".

Confirm

Möchte man zusätzlich gefragt werden, ob eine Aktivität ausgeführt werden darf (Z.B. Löschen, Ändern von Dingen, o.ä.), kann man den Confirm-Level mit übergeben:

function HelloWorld{
  [cmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
  ...

Standardmäßig fragt die Powershell immer dann nach, wenn das in einer Funktion oder Cmdlet angegebene Confirm-Level gleich oder höher ist als das gegenwertig in der Session angegebene Confirm-Level ($ConfirmPreference). Möglich sind die Werte 'None', 'Low', 'Medium' und 'High'

Testet man die so angepasste Funktion erneut aus, fragt die Powershell explizit nach:

PS C:\Powershell>HelloWorld -Greeting "Aloha!"

Confirm
Are you sure you want to perform this action?
Performing the operation "Parameter ausgeben" on target "Aloha!".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y
Aloha!

Quelle, Quelle2

Logging-Modul überarbeitet

24 Februar, 2019

Ich habe heute mal meine freie Zeit genutzt und das Logging-Modul überarbeitet.

Anders als vorher ist das gesamt Ding jetzt deutlich modularer und bietet zudem zwei weitere LogProvider an: Memory und EventLog.

Zu finden ist das Modul (und eine Kurzanleitung über die Verwendung) wie gehabt unter https://gitlab.com/rldml/PowershellLogging

Logging-Modul Fehler behoben

10 September, 2018

Mein Logging-Modul hatte einen kleinen Fehler in der Funktion Find-LogFile. Sobald die erste Logdatei voll ist, soll das Modul eine zweite Logdatei anlegen. An der Stelle ich versehentlich nicht den Dateipfad, sondern das Dateiobjekt übergeben.

Der Fehler ist jetzt korrigiert und im Repository von Gitlab verfügbar: https://gitlab.com/rldml/PowershellLogging

Home