powershell“无法使用指定的命名参数解析参数集”

时间:2013-08-09 09:51:13

标签: powershell

希望您可以帮我解决在本地计算机上使用备用凭据执行脚本块的问题。我一直在论坛上搜索并做一些谷歌搜索,并找到两种可能的方法来解决我的问题:

  1. 使用Invoke-Command
  2. 使用Start-Job
  3. 使用方法#1我有这个代码:

    $res = Invoke-Command -Credential $migratorCreds -ScriptBlock {param($one, $two) Get-LocalUsers -parentNodeXML $one -migratorUser $two } -ArgumentList $xmlPRE,$migratorCreds
    

    其中Get-LocalUsers是存储在自定义模块(* .psm1)中的自定义函数。

    我的问题是每次运行此代码时都会出现以下错误:

      

    无法使用指定的命名参数

    解析参数集

    所以很明显我必须遗漏一些东西,你能帮我解决一下这个话题吗?

    提前致谢...

4 个答案:

答案 0 :(得分:26)

您遇到的错误是因为-credential没有-computername不能存在。

您可以尝试这种方式:

Invoke-Command -Credential $migratorCreds  -ScriptBlock ${function:Get-LocalUsers} -ArgumentList $xmlPRE,$migratorCreds -computername YOURCOMPUTERNAME

答案 1 :(得分:1)

使用PowerShell相当新,想想我可以提供帮助。 你能试试吗?

我相信你没有为脚本块获取正确的参数:

param([string]$one, [string]$two)
$res = Invoke-Command -Credential $migratorCreds -ScriptBlock {Get-LocalUsers -parentNodeXML $args[0] -migratorUser $args[1] } -ArgumentList $xmlPRE, $migratorCreds

答案 2 :(得分:1)

关于Invoke-Command cmdlet的正确答案是正确的,但更广泛地说,cmdlet可以具有parameter sets,其中定义了输入参数组,因此您不能使用不是成员的两个参数相同的参数集。

如果其他任何cmdlet都遇到此错误,请查找其Microsoft文档,并查看页面顶部是否列出了不同的参数集。例如,Set-AzureDeployment的文档在页面顶部定义了三组。

答案 3 :(得分:0)

我最近正在解决相同的问题。我正在为我的Subtitle模块设计一个写cmdlet。我有六个不同的用户故事:

  • 仅字幕
  • 字幕和路径(使用原始文件名)
  • 字幕和新文件名(使用原始路径)
  • 使用字幕和名称后缀(使用原始路径和修改后的名称)。
  • 使用了副标题,新路径和新文件名。
  • 使用了字幕,新路径和后缀。

我最终感到非常沮丧,因为尽管这4个参数就足够了。像大多数时候一样,挫败感毫无意义,因为那是我的错。我对参数集了解得不够多。

在对文档进行了一些研究之后,我意识到问题出在哪里。了解了应如何使用参数集后,我开发了一种通用且简单的方法来解决此问题。需要一支铅笔和一张纸,但最好使用电子表格编辑器:

  1. 写下所有应如何使用cmdlet的方式=>用户案例。
  2. 继续添加具有有意义名称的参数,并标记参数的使用,直到您具有唯一的集合集=>没有重复的参数组合为止。
  3. 将执行参数设置到您的代码中。
  4. 为所有可能的用户案例准备测试。
  5. 运行测试(大惊喜,对吗?)。 IDE不会检查参数集冲突,测试可能会在以后节省很多麻烦。

示例:

Unique parameter binding resolution approach.

可以在over here中看到实际示例。

BTW:参数集中的参数唯一性是ParameterSetName属性不支持[String[]]的原因。真的没有任何意义。