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-CurrentEditor
和Get-CurrentDatabase
函数。
答案 0 :(得分:2)
出现这种差异的可能原因是展开集合的PowerShell行为。如果$cad::DocumentManager
是集合,那么Get-DocumentManager
将返回不是集合本身,而是集合的元素。为防止这种情况,您需要使用一元数组运算符,
。它使用单个元素创建数组。该阵列将展开而不是收集。
function Get-DocumentManager { ,$cad::DocumentManager }