一个 Invoke-Command 中的多个凭据
Several credentials in one Invoke-Command
假设我们有 3 台计算机:MAIN、A 和 B。没有域!(<--重要!)。
只是一个工作组。计算机 IP:
主要 - 33.0.0.100
A - 33.0.0.2
B - 33.0.0.3
我们希望在 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 个凭据 - 一目了然
- 提供 N 台计算机名称和 1 个凭据 - 所有计算机都有相同的用户 name/pass,如果我们在域环境中,则只有域用户
上面的两个选项已经实现,所以程序员只需要添加一个:
- 提供 N 台计算机名称和 N 个凭据 - 每台计算机都有单独的用户,具有唯一的 name/pass、[0]=[0]、[1]=[1]、….
真的不认为这会很辛苦或很长的工作。
无论如何,感谢您针对当前情况提供的所有 3 种解决方法!
您希望它如何运作?假设您有 10 台计算机和 10 个凭据。您是否希望它尝试每台计算机的所有凭据,直到找到有效凭据?还是您希望计算机[0] 与凭据[0] 相匹配?如果您有 5 台计算机,但通过了少于 5 个凭据怎么办?
你所处的情况并不典型。我看到了一些解决方案:
- 在两台计算机上使用相同的名称和密码创建一个
service
用户,并将其作为 .\user
传递给 Invoke-Command
- 在
Invoke-Command
上编写一个简单的包装器,在最简单的情况下,将在计算机和凭据上的 foreach
循环中执行 Invoke=Command
。您也可以稍微玩一下,使其平行而不是 foreach
- 当然最好是设置一个域控制器
假设我们有 3 台计算机:MAIN、A 和 B。没有域!(<--重要!)。 只是一个工作组。计算机 IP:
主要 - 33.0.0.100
A - 33.0.0.2
B - 33.0.0.3
我们希望在 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 个凭据 - 一目了然
- 提供 N 台计算机名称和 1 个凭据 - 所有计算机都有相同的用户 name/pass,如果我们在域环境中,则只有域用户
上面的两个选项已经实现,所以程序员只需要添加一个:
- 提供 N 台计算机名称和 N 个凭据 - 每台计算机都有单独的用户,具有唯一的 name/pass、[0]=[0]、[1]=[1]、….
真的不认为这会很辛苦或很长的工作。 无论如何,感谢您针对当前情况提供的所有 3 种解决方法!
您希望它如何运作?假设您有 10 台计算机和 10 个凭据。您是否希望它尝试每台计算机的所有凭据,直到找到有效凭据?还是您希望计算机[0] 与凭据[0] 相匹配?如果您有 5 台计算机,但通过了少于 5 个凭据怎么办?
你所处的情况并不典型。我看到了一些解决方案:
- 在两台计算机上使用相同的名称和密码创建一个
service
用户,并将其作为.\user
传递给Invoke-Command
- 在
Invoke-Command
上编写一个简单的包装器,在最简单的情况下,将在计算机和凭据上的foreach
循环中执行Invoke=Command
。您也可以稍微玩一下,使其平行而不是foreach
- 当然最好是设置一个域控制器