gpt4 book ai didi

Powershell函数返回实例化的对象......有点?

转载 作者:行者123 更新时间:2023-12-04 17:29:00 27 4
gpt4 key购买 nike

我对 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 有一个公共(public)字符串属性“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 的实际返回是一个包含程序集和对象实例的数组。您实际上是在 Object[] 类型上调用 ConnectionString ,因此它会默默地失败。

尝试将功能切换到以下。我故意省略了关键字 return 因为它在 powershell 的上下文中令人困惑。

function LoadSomeDll
{
[System.Reflect.Assembly]::LoadFrom("c:\wherever\SomeLib.dll") | out-null
new-object "SomeLib.SomeObject"
}

关于Powershell函数返回实例化的对象......有点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1074499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com