Powershell函数返回实例化对象…是什么?
我是Powershell的新手,正在设置profile.ps1文件。我有一些托管DLL,我经常使用它们来全天维护流程,我希望能够通过快速函数调用加载它们。因此,我在ps1文件中创建了此函数:Powershell函数返回实例化对象…是什么?,powershell,Powershell,我是Powershell的新手,正在设置profile.ps1文件。我有一些托管DLL,我经常使用它们来全天维护流程,我希望能够通过快速函数调用加载它们。因此,我在ps1文件中创建了此函数: function LoadSomeDll { [System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll") return new-object "SomeLib.SomeObject" } 然后,在Powershell中,我执
function LoadSomeDll
{
[System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll")
return new-object "SomeLib.SomeObject"
}
然后,在Powershell中,我执行以下操作:
PS > $myLibInstance = LoadSomeDll
问题是$myLibInstance虽然看起来是加载的,但它的行为与我期望的不一样,或者如果我在没有函数的情况下显式加载它,它的行为也不一样。假设SomeLib.SomeObject有一个公共字符串属性“ConnectionString”,它在构建对象时(从注册表中)加载自己
PS > $myLibInstance.ConnectionString
//Nothing returned
但是,如果我在没有函数的情况下这样做:
PS > [System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll")
PS > $myOtherLibInstance = new-object "SomeLib.SomeObject"
我明白了:
PS > $myOtherLibInstance.ConnectionString
StringValueOfConnectionStringProperty
为什么会发生这种情况?是否有任何方法可以从Powershell函数返回实例化的新对象
提前感谢。您遇到的问题是,原始函数返回的是一个对象数组,而不是单个对象 PowerShell中的一个诀窍是理解在函数中,每个计算非空值的语句都将写入管道。函数的返回“值”只是管道的内容 对LoadFrom的调用返回一个程序集。因此,函数LoadSomeDll的实际返回是一个包含程序集和对象实例的数组。实际上,您正在对类型对象[]调用ConnectionString,因此它会自动失败 尝试将功能切换到以下位置。我故意省略了关键字return,因为它在powershell的上下文中很混乱
function LoadSomeDll
{
[System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll") | out-null
new-object "SomeLib.SomeObject"
}
再次感谢你,贾雷德帕。上周你一直是我的Powershell救世主。@PITADev,你基本上遇到了我在Powershell早期遇到的相同问题,顺序几乎相同:)。有时候这很违反直觉。同意-在我看来,return关键字不应该接受参数。它应该表示离开一个函数,而不是其他任何函数。+1表示x0n的注释。允许return to“Example”返回对象只会导致函数如何输出对象的混乱。