我有一个生成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?
由于
答案 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\" )");