Arrays 函数未填充全局变量

Arrays 函数未填充全局变量,arrays,powershell,global-variables,Arrays,Powershell,Global Variables,这是我正在尝试的代码片段,潜在的问题是在函数外部声明的数组不能在testobjarray函数中使用。它将在函数testobjarray中将计数显示为零,但在addobjects中,我可以将对象添加到数组并显示对象的内容 $Global:objectorray = @() function addobjects() { $object = New-Object PSObject $object | Add-Member -MemberType NoteProperty -Name "Na

这是我正在尝试的代码片段,潜在的问题是在函数外部声明的数组不能在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

您没有在addobjects函数中为全局数组赋值

更改:

$objectorray+=$object
致:

testobjarray函数中的相同更改:

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

如果不必使用globals,请避免使用globals。在这种情况下,您不必这样做。更改$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中的作用域。这方面的参考是。显示如何正确使用全局作用域。出现您的问题是因为PowerShell允许在不同的作用域中使用相同名称的变量


$objectorray.Count在函数testobjarray内工作,因为它可以访问父作用域

您需要了解的所有信息都可以在中找到。请注意,在函数中修改全局变量不是一种好的做法,因为这会使故障排除变得复杂。最好让函数返回对象并在调用者范围内执行追加操作。
$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