Jump to content

Splatting: Hashtable direkt beim Aufruf der Funktion definieren u. übergeben


Go to solution Solved by cj_berlin,

Recommended Posts

Hallo Communtiy.

 

Gerade bin ich über das Splatting gestolpert und finde es feine Sache, um die PS-Skripte lesbarer zu machen.

 

Wie muss der Ausdruck aussehen, wenn ich das Hashtable direkt beim Aufruf der Funktion/des Commandlets definiere und übergeben möchte? Bisher habe ich dazu nichts im Netz gefunden und Ich habe auch schon die unterschiedlichsten Sachen ausprobiert.

 

# My Splatting tries
# ------------------

function MyFunc
{
    param
    (
        [String]$paramOne,
        [String]$paramTwo,
        [String]$paramThree,
        [String]$paramFour
    )

    Write-host
    Write-Host '--- In MyFunc ----'
    Write-Host "This is $paramOne"
    Write-Host "This is $paramTwo"
    Write-Host "This is $paramThree"
    Write-Host "This is $paramFour"
}

$SplattedParams = @{
    paramOne   = 'One.';
    paramTwo   = 'Two.';
    paramThree = 'Three.';
    paramFour  = 'Four.'
}

MyFunc @SplattedParams

@{
    paramOne   = 'One.';
    paramTwo   = 'Two.';
    paramThree = 'Three.';
    paramFour  = 'Four.'
} | ForEach-Object { MyFunc @_ }

# NOT working!!!
MyFunc @${
    paramOne   = 'One.';
    paramTwo   = 'Two.';
    paramThree = 'Three.';
    paramFour  = 'Four.'
} 

 

Danke für die Hilfe.

 

Link to comment

Da es beim Splatting darum geht, den Code leichter lesbar zu machen, wenn man einer Funktion sehr viele Parameter übergeben möchte, macht meiner Meinung nach nur die Form in Deinem ersten Beispiel Sinn.

 

Schon Dein zweites Beispiel finde ich nicht einfacher zu lesen.

 

Übrigens kannst Du in der Hashtable die abschließenden Semikola am Zeilenende weglassen. Das macht es meiner Meinung nach noch besser lesbar.

 

Ich empfehle immer noch gern diese Lektüre hier:

 

The Unofficial PowerShell Best Practices and Style Guide    

  • Like 1
Link to comment
vor 20 Stunden schrieb BOfH_666:

Schon Dein zweites Beispiel finde ich nicht einfacher zu lesen.

Mein zweites Beispiel hatte ich auch unvorteilhaft formatiert. Da ging es mir nur darum, das Hashtable an die Funktion weiterzuleiten. Vielleicht ist es ja so bisser lesbar.

# My Splatting tries
# ------------------

function MyFunc
{
    param
    (
        [String]$paramOne,
        [String]$paramTwo,
        [String]$paramThree,
        [String]$paramFour
    )

    Write-host
    Write-Host '--- In MyFunc ----'
    Write-Host "This is $paramOne"
    Write-Host "This is $paramTwo"
    Write-Host "This is $paramThree"
    Write-Host "This is $paramFour"
}

@{
    paramOne   = 'This is paramter One.'
    paramTwo   = 'This is paramter Two.'
    paramThree = 'This is paramter Three.'
    paramFour  = 'This is paramter Four.'
} | ForEach-Object { 
        MyFunc @_ 
    }

 

vor 20 Stunden schrieb BOfH_666:

Ich empfehle immer noch gern diese Lektüre hier:

 

The Unofficial PowerShell Best Practices and Style Guide    

Vielen Dank für die Lektüre. Die habe ich mir gleich zu Gemüte geführt. Da ich der Einzige in unserem zehn Mannteam ist, der Windows PowerShell halbwegs beherrsche, könnte ich gleich Standards für die Skripterstellung im Team definieren. 

Link to comment
Am 22.6.2022 um 12:19 schrieb ineedhelp:
$SplattedParams = @{
    paramOne   = 'One.';
    paramTwo   = 'Two.';
    paramThree = 'Three.';
    paramFour  = 'Four.'
}

MyFunc @SplattedParams

 

Was spricht aus Deiner Sicht denn gegen diese Variante? Das ist die lesbarste, und es dürfte auch die meistverwendete sein. Bis auf die ';' hinten, die lassen Menschen, die nicht aus C# kommen, eher weg :-)

Link to comment
vor 16 Stunden schrieb daabm:

Was spricht aus Deiner Sicht denn gegen diese Variante? Das ist die lesbarste, und es dürfte auch die meistverwendete sein.

Ich wollte die Deklarierung der Variable/des Hashtables vermeiden, weil ich diese nur einmal beim Aufruf der Funktion/des Cmdlets benötige. Ich denke auch, dass das erste Beispiel das meistverwendete ist und werde die Splatting-Technik so nutzen, wie sie allemein ist.  

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...