一个Invoke-Command中的多个凭据

时间:2016-06-11 18:56:58

标签: powershell powershell-v3.0

假设我们有3台计算机:MAIN,A和B.没有域名!(< - important!)。 只是一个工作组。计算机的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 的参数来接受凭证的ARRAY,就像 -computerName 接受计算机的ARRAY一样。

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

P.S。所有3台电脑都有PS版本。 5,如果它很重要。

(不能添加为评论,因此强制编辑开始帖;实际上是 Andrey Marchuk 帖子上的回复)

  

或者您希望计算机[0]与凭证[0]匹配吗?

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

  1. 提供1个计算机名称和1个凭证 - 日期清除
  2. 提供N台计算机名称和1个凭证 - 所有计算机都具有相同名称/通行证的用户,或者只有域用户(如果我们在域环境中)
  3. 以上两种替代方案已经实现,因此程序员只需要添加一个:

    1. 提供N台计算机名称和N个凭证 - 每台计算机都有独立的名称/通道用户,[0] = [0],[1] = [1],...。
    2. 真的不认为这将是非常艰苦或漫长的工作。 无论如何,感谢您对当前情况的所有3种解决方法!

1 个答案:

答案 0 :(得分:1)

您认为它如何运作?我们假设您有10台计算机和10个凭据。您是否希望它在尝试找到有效之前尝试每台计算机的所有凭据?或者您希望计算机[0]与凭证[0]匹配?如果您有5台计算机,但传递的凭据少于5个,那该怎么办?

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

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