跨脚本重用/共享powershell远程会话

时间:2013-02-15 21:49:38

标签: php powershell scripting

我有一个生成ps1(poweshell)脚本并管理远程计算机的php服务器。例如,我有PowerShell脚本,如下所示:

$ip=192.168.137.25;
$pw = convertto-securestring -AsPlainText -Force -String a
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "$ip\admin",$pw
 $session = new-pssession $ip -credential $cred
invoke-command -session $session -scriptblock {ls}

我从php运行这个脚本:

shell_exec("powershell.exe -ExecutionPolicy RemoteSigned -File script.ps1")

然后我需要调用第二个脚本,并希望使用第一个脚本创建的会话。 问题是如何在第一个脚本结束后使远程会话保持活动状态。 也许是否有其他解决方案,比如使用其他语言而不是php?

由于

2 个答案:

答案 0 :(得分:0)

如果托管计算机上有Powershell V3,则可以使用Disconnected Sessions,在第一个脚本中创建会话,然后使用Disconnect-PSSession显式断开连接。然后,您可以在第二个脚本中使用Connect-PSSession重新连接回同一会话。

答案 1 :(得分:0)

您可以使用全局变量重用/共享多个脚本之间的远程PowerShell会话。

在第一个脚本中,您将创建一个远程sessin并将其存储在全局变量中。

$Global:session = New-PSSession -ComputerName $remoteServer -credential $credential

在所有其他脚本中,您可以使用Invoke-Command,如下所示:

Invoke-Command -Session $session -ScriptBlock {
 /* Remote code */
}

然后您可以按如下方式运行脚本:

$scripts = "create_session.ps1; script_1.ps1; script_2.ps1";
shell_exec("powershell.exe -Command @(\"$scripts\" )");