none
Funtionen mit Referenz Parametern RRS feed

  • Frage

  • Hi,

    langsam verzweifle ich. Eigentlich sollte dieses Script 2 mal eine 5 auswerfen.

    Weiß jemand was daran falsch ist und wie es korrekt geht ?

    [string]$Global = ''
    
    
    function TestRefFunction([ref]$Param)
    {
        [string]$Param = '5'
        $Param | Out-Default
    }
    
    TestRefFunction([ref]$Global)
    
    $Global | Out-Default

    Gruß Frank


    • Bearbeitet FrankAusDo Mittwoch, 19. August 2015 07:42
    Mittwoch, 19. August 2015 07:25

Antworten

  • Hallo Frank,

    habs getestet - so sollte das gewünschte Ergebnis rauskommen.

    [string]$Global = ''
    
    
    function TestRefFunction([ref]$Param)
    {
        [string]$Param.Value = '5'
        $Param | Out-Default
    }
    
    TestRefFunction([ref]$Global)
    
    $Global | Out-Default

    Kleiner Tipp noch am Rande - Powershell ISE - STRG+J -> Commandlet erweitert.

    Da kriegst du folgendes Konstrukt, was etwas mehr Möglichkeiten bei den Parametern gibt und imho auch übersichtlicher ist.

    <#
    .Synopsis
       Kurzbeschreibung
    .DESCRIPTION
       Lange Beschreibung
    .EXAMPLE
       Beispiel für die Verwendung dieses Cmdlets
    .EXAMPLE
       Ein weiteres Beispiel für die Verwendung dieses Cmdlets
    .INPUTS
       Eingaben in dieses Cmdlet (falls vorhanden)
    .OUTPUTS
       Ausgabe dieses Cmdlets (falls vorhanden)
    .NOTES
       Allgemeine Hinweise
    .COMPONENT
       Die Komponente, zu der dieses Cmdlet gehört
    .ROLE
       Die Rolle, zu der dieses Cmdlet gehört
    .FUNCTIONALITY
       Die Funktionalität, die dieses Cmdlet am besten beschreibt
    #>
    function Verb-Noun
    {
        [CmdletBinding(DefaultParameterSetName='Parameter Set 1', 
                      SupportsShouldProcess=$true, 
                      PositionalBinding=$false,
                      HelpUri = 'http://www.microsoft.com/',
                      ConfirmImpact='Medium')]
        [Alias()]
        [OutputType([String])]
        Param
        (
            # Hilfebeschreibung zu Param1
            [Parameter(Mandatory=$true, 
                       ValueFromPipeline=$true,
                       ValueFromPipelineByPropertyName=$true, 
                       ValueFromRemainingArguments=$false, 
                       Position=0,
                       ParameterSetName='Parameter Set 1')]
            [ValidateNotNull()]
            [ValidateNotNullOrEmpty()]
            [ValidateCount(0,5)]
            [ValidateSet("sun", "moon", "earth")]
            [Alias("p1")] 
            $Param1,
    
            # Hilfebeschreibung zu Param2
            [Parameter(ParameterSetName='Parameter Set 1')]
            [AllowNull()]
            [AllowEmptyCollection()]
            [AllowEmptyString()]
            [ValidateScript({$true})]
            [ValidateRange(0,5)]
            [int]
            $Param2,
    
            # Hilfebeschreibung zu Param3
            [Parameter(ParameterSetName='Another Parameter Set')]
            [ValidatePattern("[a-z]*")]
            [ValidateLength(0,15)]
            [String]
            $Param3
        )
    
        Begin
        {
        }
        Process
        {
            if ($pscmdlet.ShouldProcess("Target", "Operation"))
            {
            }
        }
        End
        {
        }
    }


    Greetings,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - München

    Blog    

    Caution: This post may contain errors.


    Mittwoch, 19. August 2015 09:56