我可以检查函数中是否存在全局arrayList,如果不存在则创建+添加吗?

时间:2017-01-20 23:37:40

标签: powershell arraylist

我想将一个项目添加到一个不一定存在的全局数组列表中。这是我正在尝试的:

function runGrunt ($fwd="./projectFolder", $argList=@())
{
$cmdProc=start-process powershell -ArgumentList "-noexit",("-command grunt "+ [string]$argList) -WorkingDirectory $fwd -PassThru
[System.Collections.ArrayList]$Global:shells.Add(($cmdProc))
}

如果在函数调用之前全局定义$Global:shells arrayList - 它可以工作,如果它未定义我得到一个错误

You cannot call a method on a null-valued expression.
At line:14 char:1
+ [System.Collections.ArrayList]$Global:shells.Add(($cmdProc))

我可以以某种方式创建$Global:shells arrayList(如果它还不存在),只是添加项目,如果有的话?它似乎试图将$null转换为arrayList并且明显失败,我可以以某种方式解决它吗?我可以使用Get-Variable shells -Scope global但是我得到一个对象,而不是一个布尔值,我有点失去了如何转换它,因为它没有isEmpty()方法或任何其他合适的方法。

1 个答案:

答案 0 :(得分:0)

检查您的全局变量对象是否为null,并在需要时创建它。另外,每次在PowerShell中调用特定于类型的方法时,请不要忘记检查它是否是正确的类型。

function runGrunt ($fwd="./projectFolder", $argList=@())
{
   $cmdProc=start-process powershell -ArgumentList "-noexit",("-command grunt "+ [string]$argList) -WorkingDirectory $fwd -PassThru

   if($null -eq $global:shells) # note that $global:shells -eq $null would not work due to the way how comparison operator work in PowerShell
   {
      $global:shells = New-Object System.Collections.ArrayList
   }
   elseif($global:shells.GetType() -eq [System.Collections.ArrayList]
   {
      $global:shells.Add(($cmdProc))
   }
   else
   {
      Write-Error "Global variable 'shells' is not of expected type System.Collections.ArrayList. Type is: $($global:shells.GetType())"
   }
}