Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell函数返回实例化对象…是什么?_Powershell - Fatal编程技术网

Powershell函数返回实例化对象…是什么?

Powershell函数返回实例化对象…是什么?,powershell,Powershell,我是Powershell的新手,正在设置profile.ps1文件。我有一些托管DLL,我经常使用它们来全天维护流程,我希望能够通过快速函数调用加载它们。因此,我在ps1文件中创建了此函数: function LoadSomeDll { [System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll") return new-object "SomeLib.SomeObject" } 然后,在Powershell中,我执

我是Powershell的新手,正在设置profile.ps1文件。我有一些托管DLL,我经常使用它们来全天维护流程,我希望能够通过快速函数调用加载它们。因此,我在ps1文件中创建了此函数:

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”返回对象只会导致函数如何输出对象的混乱。