2016-03-01 44 views
0

所以我有一个PowerShell的问题,似乎应该很容易解决,但我无法自己搞清楚。在Powershell中确定自定义对象的范围

就拿下面的程序:

$MyFavoriteAnimals = @() 
$Pets = "Cat","Dog","Fish","Bird" 
$Names = "Jeb","Rex","Sam","Roger" 

For ($i=0; $i -lt 4; $i++) 
{ 
    $NewAnimal = @{"Kind" = $Pets[$i]; "Name" = $Names[$i]} 
    $MyFavoriteAnimals += New-Object pscustomobject -Property $NewAnimal 
} 
$MyFavoriteAnimals | FT Kind, Name -AutoSize 

这工作得很好,并具有以下的输出:

Kind Name 
---- ---- 
Cat Jeb 
Dog Rex 
Fish Sam 
Bird Roger 

...但如果我尝试把这个变成一个功能和范围$ MyFavoriteAnimals作为全局New-Object命令停止工作:

Function My-Favorite-Animals { 

    $Global:MyFavoriteAnimals = @() 

    $Pets = "Cat","Dog","Fish","Bird" 
    $Names = "Jeb","Rex","Sam","Roger" 

    For ($i=0; $i -lt 4; $i++) 
    { 
     $NewAnimal = @{"Kind" = $Pets[$i]; "Name" = $Names[$i]} 
     $MyFavoriteAnimals += New-Object pscustomobject -Property $NewAnimal 
    } 

} 

My-Favorite-Animals 
$MyFavoriteAnimals | FT Kind, Name -AutoSize 

...我得到了fol降脂错误:

Method invocation failed because [System.Management.Automation.PSObject]  does not contain a method named 'op_Addition'. 
At line:13 char:9 
+   $MyFavoriteAnimals += New-Object pscustomobject -Property $NewAnimal 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (op_Addition:String) [], RuntimeException 
+ FullyQualifiedErrorId : MethodNotFound 

回答

1

指定:** $全球:** MyFavoriteAnimals + =,如:

Function My-Favorite-Animals { 

    $Global:MyFavoriteAnimals = @() 

    $Pets = "Cat","Dog","Fish","Bird" 
    $Names = "Jeb","Rex","Sam","Roger" 

    For ($i=0; $i -lt 4; $i++) 
    { 
     $NewAnimal = @{"Kind" = $Pets[$i]; "Name" = $Names[$i]} 
     $Global:MyFavoriteAnimals += New-Object pscustomobject -Property $NewAnimal 
    } 

} 

My-Favorite-Animals 
$MyFavoriteAnimals | FT Kind, Name -AutoSize 
+0

谢谢!这样可行! – TroggleDorf