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-Key: 7749218221

Url: https://administrator.de/contentid/7749218221

Printed on: May 6, 2024 at 07:05 o'clock

Member: Cleanairs
Cleanairs Jul 05, 2023 updated at 11:36:41 (UTC)
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?
Member: emeriks
emeriks Jul 05, 2023 updated at 11:40:25 (UTC)
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.
Member: TK1987
Solution TK1987 Jul 05, 2023 at 11:38:38 (UTC)
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
Member: Cleanairs
Cleanairs Jul 05, 2023 at 11:40:44 (UTC)
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()
Member: HighSpeed1
HighSpeed1 Jul 05, 2023 at 11:45:35 (UTC)
Goto Top
@TK1987

[CmdletBinding()]Param()

Das ist genau das was ich suchte.

Danke für die schnelle Info.

Gruß Christoph
Mitglied: 7426148943
7426148943 Jul 05, 2023 updated at 11:47:39 (UTC)
Goto Top
Das ist genau das was ich suchte.
Zum Nachlesen
Chapter 9 - Advanced Functions
Member: godlie
godlie Jul 05, 2023 at 11:47:36 (UTC)
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
Member: TK1987
TK1987 Jul 05, 2023 at 11:48:58 (UTC)
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
Member: emeriks
emeriks Jul 05, 2023 at 11:51:40 (UTC)
Goto Top
Wieder was Neues gelernt.
Danke, Leute!
face-smile
Member: Cleanairs
Cleanairs Jul 05, 2023 at 12:02:08 (UTC)
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!
Member: HighSpeed1
HighSpeed1 Jul 05, 2023 at 12:05:01 (UTC)
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
Mitglied: 7426148943
7426148943 Jul 05, 2023 updated at 12:59:57 (UTC)
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.
Member: HighSpeed1
HighSpeed1 Jul 05, 2023 at 13:12:31 (UTC)
Goto Top
@7426148943:

Danke für die Info.

Gruß
Christoph