PowerShell在用户管理和维护Windows方面是一个强大的命令行环境。虽然PowerShell是一个本地管理工具,但是它也用于管理远程服务器。事实上,管理员可以针对大量的服务器创建PowerShell脚本来执行管理任务。Invoke-Command和New-PSSession都是在远程服务器中PowerShell的执行命令。

Invoke-Command

如果你只需要针对单台或者多台远程服务器执行一个命令(或者一系列的管道命令),那么最便利的方法就是使用Invoke-Command命令。Microsoft的文档列出了绝大多数的参数和语法,导致人人皆知Invoke-Command命令的复杂性。即使如此,使用Invoke-Command在远程系统上执行命令仍然出奇地容易。

对于基本的远程命令执行,你只需要提供远程计算机的名称和想要执行的代码块。假设你想要在名称为Production1的远程服务器上执行Get-VM命令,你可以使用下面的命令:

Invoke-Command –ComputerName Production1 {Get-VM}

虽然这看起来很简单,但是你也要对使用这个方法了解以下几点。

首先,Invoke-Command命令不限制你在一个远程系统上执行命令,你可以在多个计算机上指定命令,你需要做的就是使用命令区分开这些计算机的名称。例如,在Production1,Production2和Production3计算机上执行命令如下:

Invoke-Command –ComputerName Production1, Production2, Production3 {Get-VM}

第二点,你必须要知道虽然这个方式的设计目的只是简单地在单个远程系统上运行的单一命令,但是你也可以运行多个命令。如果查看之前的几行代码,你会注意到允许在远程计算机上运行的Get-VM命令是包含在花括号里面的。任何在花括号里面的命令都会在指定的远程计算机行运行。同样的,只要所有的命令都包含在花括号里面,你可以使用管道符号把命令把它们链接在一起。

第三点你必须知道上面的语法只有在所有计算机中使用了Kerberos认证才会运行,同时包括有命令输入和已经加入了域。否则,你必须使用HTTPS传输,并且必须指定远程系统是受信任的主机。

New-PSSession

New-PSSession通常用于在远程系统上执行命令。Invoke-Command命令设计于用于在远程系统上执行单一命令(或者一连串的命令),而New-PSSession实际上是用于在远程服务器上重定向PowerShell。实质上,你输入的任何命令都会自动发送到远程机器上运行。

例如Invoke-Command命令,这里有许多不同的New-PSSession命令变量,你可以从Microsoft官网文档中寻找这些变量。

这个命令如此简易,它只要求提供远程计算机的名称。例如,如果你想和名为Production1的计算机建立一个会话,你可以使用以下命令:

New-PSSession –ComputerName Production1

这个命令会与指定的计算机建立会话,但是它不会自动重定向任何你在远程计算机输入的执行PowerShell命令;原因是Microsoft并不限制你只使用一个远程会话。你可能需要和多个不同的服务器建立回话。因此,输入上述命令建立一个会话,PowerShell会提供确认的会话,也会罗列出一个会话ID号,但仅此而已。

如果你想要使用远程会话,那么你将不得不使用另一个名为 Enter-PSSession的PowerShell命令,只是简单地附件上你想连接到会话ID号即可。例如,如果有一个连接到Production1,且会话ID为列名1的New-PSSession会话,你就可以输入一下命令来连接这个会话:

Enter-PSSession 1

当你在使用这个命令时,PowerShell会提示你为这个远程程系统更改一个相关的名称,这样你就可以很轻松地跟踪你正在发送命令的系统了。

再一次的,你需要确保使用了Kerberos认证,并且所有的系统都已经加入了域。否则,想要建立远程会话,你需要多加几个额外的步骤。

正如你所见到的,PowerShell让远程服务器上的命令执行更加容易,尤其是当你所有的服务器和工作站属于同一个域时。

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党