26

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

  1. 使用调用命令
  2. 使用开始工作

使用方法#1我有这个代码:

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

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

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

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

所以很明显我一定遗漏了一些东西,你能帮我解决这个问题吗?

提前致谢...

4

4 回答 4

39

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

你可以这样试试:

Invoke-Command -Credential $migratorCreds  -ScriptBlock ${function:Get-LocalUsers} -ArgumentList $xmlPRE,$migratorCreds -computername YOURCOMPUTERNAME
于 2013-08-09T11:33:59.470 回答
9

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

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

于 2018-11-14T22:56:59.807 回答
1

使用 PowerShell 的新手,我想我可能会提供帮助。你能试试这个吗?

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

param([string]$one, [string]$two)
$res = Invoke-Command -Credential $migratorCreds -ScriptBlock {Get-LocalUsers -parentNodeXML $args[0] -migratorUser $args[1] } -ArgumentList $xmlPRE, $migratorCreds
于 2013-08-09T11:03:50.480 回答
1

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

  • 仅字幕
  • 字幕和路径(使用原始文件名)
  • 字幕和新文件名(使用原始路径)
  • 使用字幕和名称后缀(使用原始路径和修改后的名称)。
  • 使用子图块、新路径和新文件名。
  • 使用了字幕、新路径和后缀。

我最终感到非常沮丧,因为我认为 4 个参数就足够了。像大多数时候一样,沮丧是没有意义的,因为这是我的错。我对参数集知之甚少。

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

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

例子:

独特的参数绑定解析方法。

实际例子可以在这里看到。

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

于 2019-10-16T19:15:55.580 回答