函数未填充全局变量



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

如果没有必要,请避免使用全局变量。在这种情况下,您不必这样做。更改$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_scopes。GVEE的回答展示了如何正确使用全局范围。发生此问题是因为 PowerShell 允许在不同作用域中使用同名的变量。

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

您没有在 addobjects() 函数中为 Global 数组赋值

改变:

$objectorray+=$object

自:

$global:objectorray+=$object

testobjarray()函数的相同更改:

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

相关内容

  • 没有找到相关文章

最新更新