仅将位置从远程计算机传递到多台计算机一次

时间:2016-09-12 08:55:38

标签: windows powershell powershell-v3.0 invoke-command

  1. 我在多台机器上有一个脚本C:\code.ps1,比如A,B,C。

    code.ps1如下所示

    $path = Read-Host "Provide path name"
    $AbsolutePath = "$path\somefile"
    
  2. 当您运行code.ps1时,它会在进一步执行之前询问某个位置的用户输入。

  3. 由于我需要在多台机器并行上运行code.ps1,我决定从一台远程机器运行它,比如D,如下所示:

    $comp = @('A','B','C')
    Invoke-Command -ComputerName $comp -ScriptBlock {C:\code.ps1}
    
  4. 它对A,B,C运行良好,但问题是我需要提供3次用户输入(这里是3台机器A,B,C),就像我们运行code.ps1时一样用于某个位置的用户输入。

  5. 我们如何解决这个问题,以便从机器D运行此脚本只会询问用户输入一次,而不管是否。加工的code.ps1就在那里。

1 个答案:

答案 0 :(得分:0)

如果所有远程主机上的位置相同,您应该能够通过using:范围分类器获取scriptblock内的路径。

$Location = Read-Host -Prompt "Input location for the installer"
$Machine  = @('A','B')
Invoke-Command -Computer $Machine -ScriptBlock {& "$using:Location\install.msi"}

您也可以将路径作为参数传递给scriptblock:

$Location = Read-Host -Prompt "Input location for the installer"
$Machine  = @('A','B')
Invoke-Command -Computer $Machine -ScriptBlock {
    Param($Installer)
    & "$Installer"
} -ArgumentList "$Location\install.msi"

无论哪种方式都将路径放在双引号中以处理其中的空格,并使用call运算符来执行命令字符串。

如果路径因机器而异,则需要将命令作为每台机器的单独作业调用。提示远程计算机无法正常工作,因为调用的命令不会在交互式会话中运行。