如何在 PowerShell 中调用带有输出参数的方法?

Posted

技术标签:

【中文标题】如何在 PowerShell 中调用带有输出参数的方法?【英文标题】:How to call a method with output parameters in PowerShell? 【发布时间】:2010-10-23 17:35:02 【问题描述】:

我正在编写一个脚本,以便在 PowerShell 开始。我正在尝试转换一个working VBScript script,它枚举远程 Windows 计算机上的映射网络驱动器。

其中一项任务是使用远程WMI 读取注册表并找到explorer.exe 的进程所有者以确定谁已登录。this guide 似乎很容易。

但是,我需要调用的WMI方法是GetOwner() from Win32_Process,它需要两个输出参数来存储它的返回值。

如何调用带有输出参数的方法?当我尝试给它两个字符串时,我收到错误:Cannot find an overload for "GetOwner" and the argument count: "2".。 MSDN页面说有两个参数,所以我不确定我做错了什么。

【问题讨论】:

【参考方案1】:

使用[ref] 修饰符:

SomeMethod( [ref] $a );

值得注意的博客条目

http://geekswithblogs.net/Lance/archive/2009/01/14/pass-by-reference-parameters-in-powershell.aspx http://weblogs.asp.net/soever/archive/2009/03/26/powershell-return-values-from-a-function-through-reference-parameters.aspx

【讨论】:

这样称呼它$YouWillNeedTheParens = SomeMethod -a:([ref]$newVar)【参考方案2】:
$explorer = gwmi Win32_Process -computerName computerName -filter "Name='explorer.exe' and SessionID=0"   
$explorer.GetOwner() | select user,domain

【讨论】:

如果可以的话,我会给你双票。这是一种更好的方法,但不幸的是与主要问题不匹配,因此我无法将其指定为已接受的答案。 我可能遗漏了一些东西,但方法签名没有显示您提到的重载:PS > $explorer.GetOwner.OverloadDefinitions System.Management.ManagementBaseObject GetOwner() 您使用的是不同的方法。我真的不明白为什么,或者我怎么知道,Win32_Process 文档显示了两个输出参数,但是通过 Powershell 它不接受任何输出参数。 Powershell 是否只是将输出参数重定向为输出集?

以上是关于如何在 PowerShell 中调用带有输出参数的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PowerShell 中执行带有参数的外部程序?

如何从 TeamCity 构建配置中设置 PowerShell 开关参数

带有参数的 PowerShell 调用不替代 PARAM 来安装 MSI

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,

带有输出变量的存储过程示例