这些函数定义不一样吗?
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-CurrentEditor
和 Get-CurrentDatabase
函数。
造成这种差异的可能原因是 PowerShell 展开集合的行为。如果 $cad::DocumentManager
是集合,那么 Get-DocumentManager
将 return 不是集合本身,而是集合的元素。为了防止这种情况,您需要使用一元数组运算符 ,
。它创建具有单个元素的数组。该数组将展开而不是收集。
function Get-DocumentManager { ,$cad::DocumentManager }
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-CurrentEditor
和 Get-CurrentDatabase
函数。
造成这种差异的可能原因是 PowerShell 展开集合的行为。如果 $cad::DocumentManager
是集合,那么 Get-DocumentManager
将 return 不是集合本身,而是集合的元素。为了防止这种情况,您需要使用一元数组运算符 ,
。它创建具有单个元素的数组。该数组将展开而不是收集。
function Get-DocumentManager { ,$cad::DocumentManager }