highspeed1
Goto Top

Beim Aufruf einer Function "-InformationAction" aktivieren

Hallo.

Ich will eine Funktion schreiben bei der man über "-InformationAction Continue" eine Meldung auf dem Bildschirm aktivieren kann.

Folgenden Code habe ich zum Testen verwendet:

function Show-Message
{
    Write-Information "Testmessage"  
}

Wenn ich jetzt die Funktion aufrufe kann ich nicht wie gewohnt "-InformationAction Continue" eingeben, da es mir nicht vorgeschlagen wird. Auch wenn ich es einfach ins Skript schreibe erhalte ich keine Ausgabe.

Wie kann ich es aktivieren das es Beispielsweise so aufrufbar ist?


Show-Message -InformationAction Continue
2

Content-ID: 7749218221

Url: https://administrator.de/forum/beim-aufruf-einer-function-informationaction-aktivieren-7749218221.html

Ausgedruckt am: 23.12.2024 um 13:12 Uhr

Cleanairs
Cleanairs 05.07.2023 aktualisiert um 13:36:41 Uhr
Goto Top
Hi.

Versuch mal
function Show-Message
{
    $InformationPreference = 'Continue'  
    Write-Output -InputObject "Testmessage"  
}
um die die Ausgabe der Information explizit an die Standardausgabe umzuleiten

Mit dem Aufruf
Show-Message -InformationAction Continue
gehts dann?
emeriks
emeriks 05.07.2023 aktualisiert um 13:40:25 Uhr
Goto Top
Hi,
was heißt "wie gewohnt"? Nicht alle Cmdlet haben diese Option.
Das musst Du bei eigenen Funktionen schon explizit einbauen.
z.B. so:

enum ActionType {
Continue
Sonstwas
Dieses
}

function Schow-Message {
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$Message,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [ActionType]$Type
    )

  switch ( $Type )
  {
    Continue {....}
    Sonstwas {....}
    Dieses {....}
  }

   Write-Host $Message
}

E.
TK1987
Lösung TK1987 05.07.2023 um 13:38:38 Uhr
Goto Top
Moin,

Zitat von @HighSpeed1:
Wenn ich jetzt die Funktion aufrufe kann ich nicht wie gewohnt "-InformationAction Continue" eingeben, da es mir nicht vorgeschlagen wird. Auch wenn ich es einfach ins Skript schreibe erhalte ich keine Ausgabe.


Wie kann ich es aktivieren das es Beispielsweise so aufrufbar ist?
Show-Message -InformationAction Continue

Dafür musst du in der Funktion das CmdletBinding-Attribut aktivieren - about_Functions_CmdletBindingAttribute

function Show-Message
{
  [CmdletBinding()]Param()
  
  Write-Information "Testmessage"  
}

Gruß Thomas
Cleanairs
Cleanairs 05.07.2023 um 13:40:44 Uhr
Goto Top
Zitat von @Cleanairs:

Hi.

Versuch mal
function Show-Message
{
    $InformationPreference = 'Continue'  
    Write-Output -InputObject "Testmessage"  
}
um die die Ausgabe der Information explizit an die Standardausgabe umzuleiten

Mit dem Aufruf
Show-Message -InformationAction Continue
gehts dann?

Stimmt. noch in die Funktion oben dazugeben:
[CmdletBinding()]
    param()
HighSpeed1
HighSpeed1 05.07.2023 um 13:45:35 Uhr
Goto Top
@TK1987

[CmdletBinding()]Param()

Das ist genau das was ich suchte.

Danke für die schnelle Info.

Gruß Christoph
7426148943
7426148943 05.07.2023 aktualisiert um 13:47:39 Uhr
Goto Top
Das ist genau das was ich suchte.
Zum Nachlesen
Chapter 9 - Advanced Functions
godlie
godlie 05.07.2023 um 13:47:36 Uhr
Goto Top
@HighSpeed1:

Du sollst nicht deinen Thread als Lösung markieren, sondern den Thread der zu deiner Lösung geführt hat face-smile

grüße
TK1987
TK1987 05.07.2023 um 13:48:58 Uhr
Goto Top
Moin,

Zitat von @Cleanairs:
Stimmt. noch in die Funktion oben dazugeben:
Die InformationPreference darf man in der Funktion aber nicht einfach auf "continue" stellen.

Der Sinn von Write-Information / Write-Debug / Write-Verbose ist ja gerade, das die Meldungen nicht immer sichtbar sein sollen, sondern eben nur, wenn der User dies so wünscht.

Gruß Thomas
emeriks
emeriks 05.07.2023 um 13:51:40 Uhr
Goto Top
Wieder was Neues gelernt.
Danke, Leute!
face-smile
Cleanairs
Cleanairs 05.07.2023 um 14:02:08 Uhr
Goto Top
Zitat von @TK1987:

Moin,

Zitat von @Cleanairs:
Stimmt. noch in die Funktion oben dazugeben:
Die InformationPreference darf man in der Funktion aber nicht einfach auf "continue" stellen.

Der Sinn von Write-Information / Write-Debug / Write-Verbose ist ja gerade, das die Meldungen nicht immer sichtbar sein sollen, sondern eben nur, wenn der User dies so wünscht.

Gruß Thomas

ah nice danke!
HighSpeed1
HighSpeed1 05.07.2023 um 14:05:01 Uhr
Goto Top
Zitat von @godlie:

@HighSpeed1:

Du sollst nicht deinen Thread als Lösung markieren, sondern den Thread der zu deiner Lösung geführt hat face-smile

grüße

Macht irgendwie Sinn. Danke für den Hinweis.

Grüße
Christoph
7426148943
7426148943 05.07.2023 aktualisiert um 14:59:57 Uhr
Goto Top
Wobei das [CMDLETBinding()] aber kein muss ist um nur die Common-Parameter bei einem CMDLet zu aktivieren.

Diese aktivieren sich sobal man entweder [CMDLETBinding()] in die Funktion einsetzt oder man mindestens einen [Parameter()] Tag vor einen der Parameter setzt.
about_CommonParameters
The common parameters are also available on advanced functions that use the CmdletBinding attribute or the Parameter attribute.
HighSpeed1
HighSpeed1 05.07.2023 um 15:12:31 Uhr
Goto Top
@7426148943:

Danke für die Info.

Gruß
Christoph
Serie: Beim Aufruf einer Function "-InformationAction" aktivieren
Beim Aufruf einer Function "-InformationAction" aktivieren13