2016-09-02 119 views
1

ps1在远程机器上。我在其他一些机器的指令下运行。命令与ScriptBlock之间的区别Powershell

是否有同时使用下面的脚本有什么区别---

invoke-command -computer $MachineName -command { C:\hello.ps1 } 
invoke-command -computer $MachineName -scriptblock{ C:\hello.ps1 } 

此外,我将使用循环具有相同的脚本的名称,但有位于工作DIFF序列多机仅在每台远程机器上。想要了解第二台机器的执行情况只有在第一台机器完成时才会执行。正确吗?

回答

3

-command和-ScriptBlock

有正在执行的差异之间的差异。 -command只是scriptblock的别名。您可以通过获取为invoke-command命令

(Get-Command -Name Invoke-Command).Parameters.Values | select name, aliases 

顺序执行

是的,执行是顺序的参数信息来验证。在第一台机器上完成命令后,您指定的命令将在第二台机器上执行。

According to the help

这些命令(每次一个)同步运行。当命令 完成时,所有计算机的命令输出为 ,保存在$ version变量中。输出包括数据来源的计算机的名称 。

+0

谢谢!任何帮助我的第二个查询,因为我希望我的第一个调用完全执行然后想要在循环中去其他服务器...是由循环和自动调用照顾? – RishuA

+0

这实际上取决于当多个计算机名通过时如何实现'Invoke-Command'。我会*认为*这是连续的,但我必须验证。 –

+0

其实我现在不能在现场机器上测试,因为有些工作正在进行更多的日子.. – RishuA

0

要回答你的第二个问题:Invoke-Command并行工作。它将脚本块中提到的所有机器并行运行到所有机器。默认情况下,powershell会一次对多达32台电脑进行对话。如果你指定的不止一个,它会将它们排队,这样当一台计算机完成时,下一个将开始。但是,我相信,您可以通过指定Invoke-Command的-throttlelimit参数来增加该数字。

+0

我正在使用循环,但它会并行吗?或一次一台机器。以下是代码。 MACHINES = Get-Content“Somelocation” foreach($ MACHINES中的$ Machine) {invoke-command -computer $ Machine -command {C:\ hello。PS1}} – RishuA

+0

利芬Keersmaekers建议,这将是一个连续的后一个.. – RishuA

+1

我试了两台活远程计算机及其顺序不平行。 – RishuA

相关问题