我在多台机器上有一个脚本C:\code.ps1
,比如A,B,C。
code.ps1
如下所示
$path = Read-Host "Provide path name"
$AbsolutePath = "$path\somefile"
当您运行code.ps1
时,它会在进一步执行之前询问某个位置的用户输入。
由于我需要在多台机器并行上运行code.ps1,我决定从一台远程机器运行它,比如D,如下所示:
$comp = @('A','B','C')
Invoke-Command -ComputerName $comp -ScriptBlock {C:\code.ps1}
它对A,B,C运行良好,但问题是我需要提供3次用户输入(这里是3台机器A,B,C),就像我们运行code.ps1
时一样用于某个位置的用户输入。
我们如何解决这个问题,以便从机器D运行此脚本只会询问用户输入一次,而不管是否。加工的code.ps1
就在那里。
答案 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运算符来执行命令字符串。
如果路径因机器而异,则需要将命令作为每台机器的单独作业调用。提示远程计算机无法正常工作,因为调用的命令不会在交互式会话中运行。