这些函数定义不一样吗?

Are these function definitions not the same?

PowerShell 4.0

它工作正常:

$cad  = [Autodesk.AutoCAD.ApplicationServices.Application]
function Get-DocumentManager { $cad::DocumentManager }
function Get-CurrentDocument { $cad::DocumentManager.MdiActiveDocument }
function Get-CurrentEditor { (Get-CurrentDocument).Editor }
function Get-CurrentDatabase { (Get-CurrentDocument).Database }

所有这些功能return 都是必要的对象。但是,如果我重写 Get-CurrentDocument 函数的主体,那么我就会遇到问题:

$cad  = [Autodesk.AutoCAD.ApplicationServices.Application]
function Get-DocumentManager { $cad::DocumentManager }
function Get-CurrentDocument { (Get-DocumentManager).MdiActiveDocument }
function Get-CurrentEditor { (Get-CurrentDocument).Editor }
function Get-CurrentDatabase { (Get-CurrentDocument).Database }

我在启动 Get-CurrentDocument 函数时收到错误消息:

Object reference not set to an instance of an object.

为什么会这样?这种方式适用于我的 Get-CurrentEditorGet-CurrentDatabase 函数。

造成这种差异的可能原因是 PowerShell 展开集合的行为。如果 $cad::DocumentManager 是集合,那么 Get-DocumentManager 将 return 不是集合本身,而是集合的元素。为了防止这种情况,您需要使用一元数组运算符 ,。它创建具有单个元素的数组。该数组将展开而不是收集。

function Get-DocumentManager { ,$cad::DocumentManager }