0

我有一个生成 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?

谢谢

4

2 回答 2

1

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

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

$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\" )");
于 2018-03-01T11:37:46.513 回答
0

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

于 2013-02-16T01:14:22.793 回答