PSSession作为login用户

我试图设置一个Powershell脚本来监视在我们的一个构build服务器上运行的VirtualBox VM(即“Builder4”)。 它有时会失去连接,我已经有一个脚本(在本地服务器上)重新加载networking适配器,但我想使其完全自动化。

我有PSSession与服务器正确authentication,连接成功,我可以从服务器运行命令,做一个交互式会话(Enter-PSSession)等,但是,这是一个“新”的会议,所以我不能pipe理任何已经运行的虚拟机

服务器设置是具有单个帐户的Windows Server 2012框。 该帐户在服务器本地,而不是在公司域(“pc-name \用户”与“company.na.com \用户”),并保持login,只要服务器正在运行。 通常我们通过RemoteDesktop连接到服务器。 即使我使用相同的pc-name,用户名和凭证连接到PSSession,它似乎并没有连接到服务器上的现有login,尽pipe我唯一支持的证据是VBoxManage list runningvms返回一个空的清单。 例如,运行以下(“test.ps1”的基本内容):

 whoami VBoxManage list vms echo ----- VBoxManage list runningvms 

给出以下输出:

从远程会话

 PS ...> test.ps1 win-*******\jenkins "Builder1" {vm-hash-code} "Builder2" {vm-hash-code} "Builder3" {vm-hash-code} "Builder4" {vm-hash-code} "Builder5" {vm-hash-code} "Builder6" {vm-hash-code} ----- PS ...> 

从服务器(本地)

 PS ...> test.ps1 win-*******\jenkins "Builder1" {vm-hash-code} "Builder2" {vm-hash-code} "Builder3" {vm-hash-code} "Builder4" {vm-hash-code} "Builder5" {vm-hash-code} "Builder6" {vm-hash-code} ----- "Builder1" {vm-hash-code} "Builder2" {vm-hash-code} "Builder3" {vm-hash-code} "Builder4" {vm-hash-code} "Builder5" {vm-hash-code} PS ...> 

正如whoamibuild议,我似乎是以正确的帐户/用户login。 但是,正如VBoxManage list runningvmsbuild议,Windows将其视为“不同的用户”(因为运行runningvms是用户特定的)。

有没有办法连接到现有的login而不登出并重新loginCLI? 当一个新的远程会话启动(或在物理机器上解锁)时,远程桌面似乎可以通过切换会话控制来工作,所以我想这个function是存在的。

为了完成和澄清,我需要通过CLI远程连接到现有的login会话, 不仅仅是一个现有的用户。 到目前为止,我还没有能够做到这一点。

PSSession使用WinRM在远程服务器上执行PS命令。 这里的会议就是这个会议,与会议无关。

如果您需要提取正在运行的RD /terminal会话特有的variables信息,则可以查看PSExec。

我将重申一些现有的信息,但希望这可以清除一些事情。

您的问题不在于脚本将PSSession视为不同的用户。 就远程连接而言,Windows是基于会话的。 一个用户可能在一台服务器上有多个会话,单独的进程不能轻松互相交互。 有一些工具可以在会话之间到达,这是与会话0中运行的系统服务交互所需的。这些会话是出于安全目的而被隔离的。 远程桌面将连接到正在运行的会话,以允许您pipe理正在运行的虚拟机。

PSSession也不是一个完整的交互式login。 它不会创build一个完整的窗口“会话”。 你可以通过在PSSession中使用tasklistquery session来查看我在说什么。 您将看到会话0和控制台的另一个会话ID,但没有您的PSSession。 它还显示了当前会话旁边的箭头。在PSSession中,它将是services会话。

现在为了让您的虚拟机能够远程显示,您可以尝试从PSSession内部启动它们。 然后,您可以稍后连接并检查它们,同时重新连接到控制台会话。

Ulfy和Cory Knutson的回答让我指出了正确的方向,find了符合我需求的解决scheme。

不幸的是,使用PSSession启动虚拟机不是一种select,因为我们仍然需要能够经常以graphics方式访问虚拟机。 我试图通过PSSession启动其中一个虚拟机,但是这个虚拟机并没有通过远程桌面或本地login(也就是“login会话”)到服务器的物理访问。

沿着同样的路线,我尝试使用PSExec,我发现它有select在特定的会话下运行(通过query session可以获得)。 我能够在与login会话相同的会话ID下启动一个虚拟机。 我只能通过检查tasklist并查看列在该会话ID下面的方式来说明这一点,因为它从未在视觉上出现过。

最终,我结束了一个StackOverflow答案到我写的脚本。 使用的代码片段为远程计算机上的指定用户创build一个计划任务,运行它,然后删除该任务。 正如答案的作者所说的那样,确实有点冒险,但是在这种情况下,我的工作很好。