【问题标题】:enter-pssession invoke-command, when to use?enter-pssession 调用命令,什么时候用?
【发布时间】:2016-01-06 09:00:22
【问题描述】:

我正在编写一个脚本来停止和启动两个远程服务器中的服务。 这是我的问题,

在我的脚本中,我执行了 new-pssession 并使用了 invoke-command 来停止和启动服务。

我需要使用 enter-pssession 吗?

更新: 这是我的脚本需要做的。

在 server1 上,我需要停止和启动两个服务。 在 server2 上,我只需要停止并启动一项服务。

# foreach for server 1 since I need to stop and start two services. created a session for server 1
foreach($service in $services){

    $session = New-PSSession -ComputerName $serverName -Credential $cred
    Invoke-Command -Session $session -ScriptBlock {param($service) Stop-Service -Name $service} -ArgumentList $service
    remove-pssession -session $session

}

# created a session for server 2. I need to stop and start just one service in server 2
$session = New-PSSession -ComputerName $serverName -Credential $cred
Invoke-Command -Session $session -ScriptBlock {param($service) Stop-Service -Name $service} -ArgumentList $service
remove-pssession -session $session

这是正确的做法吗?

【问题讨论】:

  • 保持(远程)状态?不打开和关闭新连接? -- 比如:我是否必须在每个命令上启动一个新的 PS 控制台会话(本地)? PS:......不知道,只是猜测。一个lamer在这里玩powershell的乐趣,让我们看看大师们怎么说:)

标签: powershell invoke-command


【解决方案1】:

Enter-PSSession - 由于这是一个交互式会话,您可以在控制台输入您想要的内容,然后立即在控制台中看到结果。(就像 CMD 一样)。 如果它只有 2 台服务器,那么您可以使用 enter-pssession,但它始终是串行的,这意味着您在一台服务器上执行某些操作,然后再转移到另一台服务器上。

New-PSSession - 创建到远程服务器的持久连接,通常用于在较大脚本\工作流的不同阶段在多个服务器上运行一系列命令时。

例子:

$s1, $s2 = New-PSSession -ComputerName Server1,Server2
Get-Service -Name Bits                #on localhost
Invoke-Command -session $s1 -scriptblock { # remote commands here }
Get-Process                           #on localhost
Invoke-Command -session $s1 -scriptblock { # remote commands here }
Remove-pSSession -session $s1 #on localhost

如果您只想停止\启动几个服务,那么您可以在不打开持久连接的情况下执行此操作。

例子:

Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {Stop-Service -Name Bits}

【讨论】:

  • 您好 Kiran,非常感谢您的帮助。在运行 Invoke-Command 以停止远程服务器上的服务时,我有一个问题。 Invoke-Command -Session $remoteSession -ScriptBlock {param($service) Stop-Service -Name $service} -ArgumentList $service 当我运行它时,我总是得到 [WARNING] waiting for service 'blahblah' to complete stop... 是有没有办法不显示这个警告信息?我尝试了warningaction - 静默继续并尝试设置warningpreference = 'silentlycontinue' 但它们似乎都不起作用
  • 欢迎 Jae...如果您设置了 stop-service bits -warning 'Silentlycontinue',那么您应该不会看到任何警告消息,因为这会覆盖全局设置...我在我的机器上使用 powershell V4 进行了测试,它按预期工作所以不知道为什么它不适合你...你使用的是 PS V2 吗?
【解决方案2】:

Enter-PSSession cmdlet 启动与单个远程计算机的交互式会话。

【讨论】:

  • 这有点明显,不是吗?问题似乎是关于何时首先启动远程会话以及何时执行一系列调用命令
  • 哎呀,没有注意到 ENTER-pssession 部分,请忽略我,对不起
  • 谢谢阿德里安,我刚刚更新了我的帖子。你能看看吗?谢谢
  • enter-pssession 好像不太好用
猜你喜欢
  • 1970-01-01
  • 2019-12-25
  • 2020-04-03
  • 2021-08-25
  • 2014-03-27
  • 2010-10-18
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多