在本地和远程系统中运行命令有不同的方法。我们可以用 psexec
,命令自己的功能或 Invoke-Command
cmdlet。在本教程中,我们将了解如何使用 Invoke-Command
在powershell里。 Invoke-Command
远程运行命令并返回成功或错误消息等输出。
救命
有关的详细帮助 Invoke-Command
可以是下面这样。
PS> Run Powershell Script On Remote Computer

此外,还可以通过添加 -full
选项如下。这将提供巨大的输出,并提供参数细节、使用示例等帮助。
PS> Get-Help Invoke-Command -full

启用PSRemoting
为了在远程系统上运行Powershell命令,应将远程系统配置为通过接受远程Powershell命令 PSRemoting
. 下面的文章展示了如何在windows操作系统中启用PSRemoting。
如何启用Powershell远程处理PSRemoting或WinRM?
在远程计算机上运行命令
最常用的例子之一 Invoke-Command
正在远程系统上运行命令。我们将指定以下参数来远程运行命令。
-
-ComputerName
指定远程系统的主机名或IP地址 -
Credentials
指定具有域名或计算机名的远程系统登录用户 -
-ScriptBlock
用大括号指定将在远程系统上运行的命令块。
PS> Invoke-Command -ComputerName 192.168.122.66 -Credential Administrator -ScriptBlock {Get-Culture}

如果我们不提供密码或任何凭据,Powershell将当前可用的本地凭据验证远程系统。

我们可以从给定的命令输出中看到,它在远程系统上成功执行,并且在本地系统shell中打印响应。
在远程计算机上运行Powershell脚本
在前面的示例中,我们提供了一个shell命令来在远程系统上运行。Powershell还具有在远程系统上运行本地Powershell脚本的功能。我们将提供Powershell文件以在远程系统上运行内容 myscript.ps1
Get-HostGet-Culture
我们将使用 -FilePath
选项提供如下所示的脚本文件路径。
PS> Invoke-Command -ComputerName 192.168.122.66 -Credential Administrator -FilePath c:myscript.ps1

我们可以从输出中看到,所提供的脚本文件命令是在给定的远程系统上一行执行的。
了解更多: Teamviewer安装和远程桌面连接
在多台远程计算机上运行命令
现在,前面的示例很有用,但效果较差,因为我们只提供了一个远程系统。世界的力量 Invoke-Command
来自运行多个远程系统的命令。在此步骤中,我们将指定多个远程系统。我们将对以前的命令使用相同的语法,但会在命令中添加更多的远程系统IP地址或主机名 -ComputerName
选项,用逗号分隔。我们将提供远程系统IP地址作为 192.168.122.66
和主机名 localhost
. 我们可以再添加更多的远程系统
PS> Invoke-Command -ComputerName 192.168.122.66 , localhost -Credential Administrator -ScriptBlock {Get-Culture}

我们可以看到,每个远程系统输出在同一个表和列中都列为新行。这种类型的输出使过滤和搜索更容易,可读性更强。
在多台远程计算机上运行Powershell脚本
我们将合并前面的示例,并在多个远程系统上运行给定的Powershell脚本文件。命令将如下面所示。
PS> Invoke-Command -ComputerName 192.168.122.66 , localhost -Credential Administrator -FilePath C:myscript.ps1

从远程计算机上的局部变量运行命令
在远程系统上运行命令的另一个有用资源是Powershell local 变量。我们可以在命令块中使用Powershell局部变量,就像使用常规Powershell命令一样。我们将使用 ScriptBlock
同样,我们将通过前缀 $Using:
关键字。在本例中,我们创建一个局部变量名 $dir
并设置其值 Get-Host
. 然后我们在ScriptBlock中使用这个变量,如前所述。
PS> $dir="C:"
我们已经设置了本地变量,它是我们想要列出文件和文件夹的路径。
PS> Invoke-Command -ComputerName 192.168.122.66 -Credential Administrator -ScriptBlock {Dir $Using:dir}

我们可以看到远程系统 C:
路径按预期列出。