函数不填充全局变量

时间:2017-03-20 11:43:44

标签: arrays powershell global-variables

这是我正在尝试的代码片段,潜在的问题是在函数外部声明的数组不能在testobjarray()函数中使用。它将在函数testobjarray()中将计数显示为零,但在addobjects()中,我能够将对象添加到数组并显示对象的内容。

$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

2 个答案:

答案 0 :(得分:1)

如果不需要,请避免使用全局变量。在这种情况下,你没有必要。更改$objectorray的范围,使其仅在脚本范围内。然后使用函数的返回值来填充$objectorray。请注意,我只更改了我需要的一点,以使此示例工作。

$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"
  $object
  Write-Host "in addobjects function" $object
}

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

$objectorray += addobjects
testobjarray

如评论中所述,您需要查看并了解PowerShell中的范围。对此的引用是about_scopesgvee's answer显示了如何正确使用全局范围。您的问题发生了,因为PowerShell允许在不同范围内使用相同名称的变量。

由于访问父作用域,

$objectorray.Count在函数testobjarray内部工作。

答案 1 :(得分:0)

您没有为addobjects()函数中的全局数组分配值

变化:

$objectorray+=$object

要:

$global:objectorray+=$object

testobjarray()功能的相同变化:

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