Powershell 调用命令错误“;无法使用指定的命名参数“解析参数集”;

Powershell 调用命令错误“;无法使用指定的命名参数“解析参数集”;,powershell,Powershell,希望您能帮助我解决在本地计算机上使用备用凭据执行脚本块时遇到的问题。我一直在论坛上进行彻底搜索,并在谷歌上搜索,找到了两种可能的方法来解决我的问题: 使用Invoke命令 使用开始作业 使用方法#1,我得到了以下代码: $res = Invoke-Command -Credential $migratorCreds -ScriptBlock {param($one, $two) Get-LocalUsers -parentNodeXML $one -migratorUser $two } -Ar

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

  • 使用Invoke命令
  • 使用开始作业
  • 使用方法#1,我得到了以下代码:

    $res = Invoke-Command -Credential $migratorCreds -ScriptBlock {param($one, $two) Get-LocalUsers -parentNodeXML $one -migratorUser $two } -ArgumentList $xmlPRE,$migratorCreds
    
    其中,
    Get LocalUsers
    是存储在自定义模块(*.psm1)中的自定义函数

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

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

    很明显,我肯定遗漏了什么,你能在这个话题上帮助我吗


    提前感谢…

    刚刚开始使用PowerShell,我想我可能能帮上忙。 你能试试这个吗

    我认为您没有为脚本块获取正确的参数:

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

    您的错误是因为没有
    -computername
    -credential
    不存在

    您可以这样尝试:

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

    对于Invoke-Command cmdlet,公认的答案是正确的,但更广泛地说,cmdlet可以具有定义输入参数组的位置,因此不能使用两个不是同一参数集成员的参数


    如果您在使用任何其他cmdlet时遇到此错误,请查阅其Microsoft文档,查看页面顶部是否列出了不同的参数集。例如,的文档在页面顶部定义了三个集合。

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

    • 仅字幕
    • 字幕和路径(使用原始文件名)
    • 字幕和新文件名(使用原始路径)
    • 使用字幕和名称后缀(使用原始路径和修改后的名称)
    • 使用子文件、新路径和新文件名
    • 使用字幕、新路径和后缀
    我最终感到非常沮丧,因为我认为这4个参数就足够了。和大多数时候一样,挫折是毫无意义的,因为这是我的错。我对参数集了解不够

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

  • 写下使用cmdlet的所有预期方式=>用户情景
  • 继续添加具有有意义名称的参数,并标记参数的使用,直到您拥有唯一的集合集=>没有重复的参数组合
  • 在代码中实现参数集
  • 为所有可能的用户情景准备测试
  • 运行测试(大惊喜,对吧?)。IDEs不检查参数集冲突,测试可以避免以后的许多麻烦
  • 例如:

    可以看到实际的例子


    顺便说一句:
    ParameterSetName
    属性不支持
    [String[]]
    的原因是参数集中的参数唯一性。这没有任何意义。

    谢谢你的帮助。虽然我在WinRM上还有另一个问题,但它工作得很好,但我会在询问之前尝试自己解决;)@SantiFdezMunoz很乐意帮忙!为了可重用性,您可以使用localhost而不是您的ComputerName。@rob我认为不会。
    localhost
    将始终解析本地计算机名,而不是远程计算机名……您如何知道需要哪些参数?感谢@bootleboot的回复,但实际上@C.B.方法解决了我的问题。它与计算机参数有关。无论如何,感谢您的回答我,您的回答可能是解决一般问题的一个很好且有用的方法,但正如问题作者在第二个答案中所评论的,他并不是在寻找参数集相关错误的解决方案,而是在与另一个用户调用命令——尽管我认为问题标题具有误导性。如果我正确理解了您的答案,那么您是从模块开发人员的角度编写的,而不是从用户的角度。如果没有相应的问题,你可以自己回答-->@BernhardStadler不太可能。在这个特定的问题中,模块开发人员和只是编写脚本的人的观点并不重要。当有人不完全理解PowerShell中的参数集是如何工作的时,就会出现此绑定错误。没有别的了。这是唯一一个讨论这个问题的话题,我认为自我回答是不合理的重复。