2017-03-20 3 views
0

Voici l'extrait de code que j'essaie, le problème potentiel est que le tableau qui est déclaré en dehors de la fonction ne peut pas être utilisé dans la fonction testobjarray(). Il affichera le nombre comme zéro dans la fonction testobjarray(), mais dans addobjects() je suis en mesure d'ajouter l'objet à la matrice et afficher le contenu de l'objet.La fonction ne remplit pas la variable globale

$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

Toutes les informations dont vous avez besoin pour comprendre cela peuvent être trouvées dans ['Get-Help about_Scopes'] (https://msdn.microsoft.com/fr-fr/powershell/reference/5.1/microsoft.powershell. core/about/about_scopes). –

+1

Notez que la modification de variables globales dans une fonction n'est pas une bonne pratique, car cela complique le dépannage. Il est préférable que la fonction renvoie l'objet et effectue l'opération d'ajout dans la portée de l'appelant. –

Répondre

0

Vous n'êtes pas attribuer des valeurs au tableau global dans votre fonction addobjects()

Change:

$objectorray+=$object 

Pour:

$global:objectorray+=$object 

Et le même changement dans votre testobjarray() Fonction:

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

Évitez d'utiliser des globales si vous ne le devez pas. Dans ce cas, vous n'êtes pas obligé. Modifiez la portée de $objectorray afin qu'il soit juste dans la portée du script. Utilisez ensuite la valeur de retour de votre fonction pour renseigner $objectorray. Notez que j'ai seulement changé le peu dont j'avais besoin pour que cet exemple fonctionne. Comme mentionné dans les commentaires, vous devez avoir un aspect et une compréhension des étendues dans PowerShell. La référence pour cela est about_scopes. gvee's answer montre comment utiliser correctement la portée globale. Votre problème est survenu parce que PowerShell autorise des variables avec le même nom dans différentes portées.

$objectorray.Count fonctionne à l'intérieur de la fonction testobjarray en raison de l'accès à la portée parente.