这些功能定义不一样吗?

时间:2016-02-02 12:46:37

标签: powershell autocad powershell-v4.0 autocad-plugin

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 }

所有这些函数都返回必要的对象。但是,如果我重写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功能时收到错误消息:

  

对象引用未设置为对象的实例。

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

1 个答案:

答案 0 :(得分:2)

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

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