2017-03-20 2 views
0

Hier ist das Code-Snippet Ich versuche, das mögliche Problem ist das Array, das außerhalb der Funktion deklariert wird, kann nicht in der testobjarray() Funktion verwendet werden. In der Funktion testobjarray() wird die Zählung als Null angezeigt, aber in addobjects() kann ich das Objekt zum Array hinzufügen und den Inhalt des Objekts anzeigen.Funktion füllt globale Variable nicht

$Global:objectorray = @() 

function addobjects() { 
    $object = New-Object PSObject 
    $object | Add-Member -MemberType NoteProperty -Name "Name" -Value "Pradeep RN" 
    $object | Add-Member -MemberType NoteProperty -Name "Age" -Value 24 
    $object | Add-Member -MemberType NoteProperty -Name "Profession" -Value "Software Engineer" 
    $objectorray += $object 
    Write-Host "in addobjects function" $objectorray 
} 

function testobjarray() { 
    Write-Host "in the another function" $objectorray.Count 
} 

addobjects 
testobjarray 
+1

Alle Informationen, die Sie benötigen, um das herauszufinden, finden Sie in ['Get-Help about_Scopes'] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell. core/about/about_scopes). –

+1

Beachten Sie, dass das Ändern globaler Variablen in einer Funktion nicht empfehlenswert ist, da dies die Problembehandlung erschwert. Es ist besser, wenn die Funktion das Objekt zurückgibt und die Append-Operation im Aufruferbereich ausführt. –

Antwort

0

Sie zuweisen nicht Werte an die Globale Array in Ihrer addobjects() Funktion

Wechsel:

$objectorray+=$object 

An:

$global:objectorray+=$object 

Und die gleiche Änderung in Ihrem testobjarray() Funktion:

Write-Host "in the another function" $global:objectorray.Count 
1

Vermeiden Sie Globals, wenn Sie nicht müssen. In diesem Fall müssen Sie nicht. Ändern Sie den Gültigkeitsbereich von $objectorray so, dass es sich nur im Skriptbereich befindet. Verwenden Sie dann den Rückgabewert Ihrer Funktion, um $objectorray aufzufüllen. Beachten Sie, dass ich nur das Wenige geändert habe, um dieses Beispiel funktionieren zu lassen.

Wie in den Kommentaren erwähnt, müssen Sie Bereiche in PowerShell ansehen und verstehen. Die Referenz dafür ist about_scopes. gvee's answer zeigt, wie der globale Bereich ordnungsgemäß verwendet wird. Ihr Problem ist aufgetreten, weil PowerShell Variablen mit demselben Namen in verschiedenen Bereichen zulässt.

$objectorray.Count arbeitet in der Funktion testobjarray wegen des Zugriffs auf den übergeordneten Bereich.

Verwandte Themen