我想将一个项目添加到一个不一定存在的全局数组列表中。这是我正在尝试的:
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()
方法或任何其他合适的方法。
答案 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())"
}
}