一个 Invoke-Command 中的多个凭据

Several credentials in one Invoke-Command

假设我们有 3 台计算机:MAIN、A 和 B。没有域!(<--重要!)。 只是一个工作组。计算机 IP:

我们希望在 MAIN 上键入 cmdlet 并同时在 A&B 上执行它们。 因此,我们在所有计算机上组织 Windows 远程管理并命令

Invoke-Command -computerName 33.0.0.2 -command {dir C:\Utils} -Credential(Get-Credential)

可以正常工作并在 A 上的文件夹 Utils 中生成文件列表。我们知道,Invoke-Command 的语法允许我们也写这样的命令

Invoke-Command -computerName 33.0.0.2, 33.0.0.3 -command {dir C:\Utils} -Credential(Get-Credential)

这正是我们想要的,但是! A 和 B 上的用户完全不同 - 没有相同的用户,没有相同的密码。因此,我们需要 -Credential Invoke-Command 的参数来接受凭据数组,就像 -computerName 接受 ARRAY 台计算机。

这是个问题。有什么想法吗?

P.S。所有 3 台计算机都有 PS 版本。 5,如果重要的话。


(无法添加为评论,所以被迫编辑开始post;实际上是在Andrey Marchuk post上的回复)

Or do you expect computer[0] to match credential[0]?

没错!而且,坦率地说,我没有看到 invoke-command 的程序员像这样进行“一对一”匹配有任何技术问题。在这种情况下,invoke-command 的用户将有 3 个选项:

  1. 提供 1 个计算机名称和 1 个凭据 - 一目了然
  2. 提供 N 台计算机名称和 1 个凭据 - 所有计算机都有相同的用户 name/pass,如果我们在域环境中,则只有域用户

上面的两个选项已经实现,所以程序员只需要添加一个:

  1. 提供 N 台计算机名称和 N 个凭据 - 每台计算机都有单独的用户,具有唯一的 name/pass、[0]=[0]、[1]=[1]、….

真的不认为这会很辛苦或很长的工作。 无论如何,感谢您针对当前情况提供的所有 3 种解决方法!

您希望它如何运作?假设您有 10 台计算机和 10 个凭据。您是否希望它尝试每台计算机的所有凭据,直到找到有效凭据?还是您希望计算机[0] 与凭据[0] 相匹配?如果您有 5 台计算机,但通过了少于 5 个凭据怎么办?

你所处的情况并不典型。我看到了一些解决方案:

  1. 在两台计算机上使用相同的名称和密码创建一个 service 用户,并将其作为 .\user 传递给 Invoke-Command
  2. Invoke-Command 上编写一个简单的包装器,在最简单的情况下,将在计算机和凭据上的 foreach 循环中执行 Invoke=Command。您也可以稍微玩一下,使其平行而不是 foreach
  3. 当然最好是设置一个域控制器