enter-pssession invoke-command,什么时候用?
enter-pssession invoke-command, when to use?
我正在编写一个脚本来停止和启动两个远程服务器中的服务。
这是我的问题,
在我的脚本中,我执行了 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
这样做正确吗?
Enter-PSSession cmdlet 启动与单个远程计算机的交互式 会话。
Enter-PSSession
- 由于这是一个交互式会话,您可以在控制台键入您想要的内容并立即在控制台中看到结果。(就像 CMD 一样)。
如果它只有 2 个服务器,那么您可以使用 enter-pssession
,但它始终是串行的,这意味着您在一台服务器上执行某些操作,然后再转移到另一台服务器上。
New-PSSession
- 创建到远程服务器的持久连接,通常用于在更大 script\workflow 的不同阶段的多个服务器上对 运行 执行一系列命令时使用.
示例:
$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
如果您只想stop\start几个服务,那么您可以在不打开持久连接的情况下执行此操作。
示例:
Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {Stop-Service -Name Bits}
我正在编写一个脚本来停止和启动两个远程服务器中的服务。 这是我的问题,
在我的脚本中,我执行了 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
这样做正确吗?
Enter-PSSession cmdlet 启动与单个远程计算机的交互式 会话。
Enter-PSSession
- 由于这是一个交互式会话,您可以在控制台键入您想要的内容并立即在控制台中看到结果。(就像 CMD 一样)。
如果它只有 2 个服务器,那么您可以使用 enter-pssession
,但它始终是串行的,这意味着您在一台服务器上执行某些操作,然后再转移到另一台服务器上。
New-PSSession
- 创建到远程服务器的持久连接,通常用于在更大 script\workflow 的不同阶段的多个服务器上对 运行 执行一系列命令时使用.
示例:
$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
如果您只想stop\start几个服务,那么您可以在不打开持久连接的情况下执行此操作。
示例:
Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {Stop-Service -Name Bits}