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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨脚本重用/共享powershell远程会话相关的知识,希望对你有一定的参考价值。

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

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

我从php运行这个脚本:

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

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

谢谢

答案

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

另一答案

您可以使用全局变量重用/共享多个脚本之间的远程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" )");

以上是关于跨脚本重用/共享powershell远程会话的主要内容,如果未能解决你的问题,请参考以下文章

Powershell - 运行位于远程机器上的脚本,该脚本反过来从网络共享访问文件

Powershell 远程配置文件

在远程机器上启动应用程序并保持运行,powershell 脚本不应等待进程完成

在 C# 中使用不同的凭据调用远程 powershell 脚本

如何在 powershell 远程会话(powershell)中编辑文件

XCode 中是不是有一种好方法可以跨项目重用类并轻松与其他开发人员共享?