通过远程Azure会话与RDP运行时,Exe的行为会有所不同

时间:2013-12-05 18:58:12

标签: powershell azure powershell-remoting

我们已经构建了一个连接到我们的Windows服务并执行某些任务的.Net控制台应用程序。如果我将RDP导入Azure VM并运行以下命令,它将完美运行:

& "$toolDir\my.exe" arg1, arg2 arg3

但是,如果我通过New-PSSession创建的远程会话执行此操作,则会失败。这是我创建会话的方式。我将此会话用于许多其他任务,其他一切(包括运行MSI,注册表等)都有效。

$uri = Get-AzureWinRMUri -ServiceName $vmName -Name $vmName
$pwd = convertto-securestring -String $textpwd -AsPlainText -Force
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $pwd
$session = New-PSSession -ComputerName $uri[0].DnsSafeHost -Credential $credentials -Port $uri[0].Port -UseSSL -ErrorAction Stop

我已尝试在此远程会话中以多种方式运行我的exe。我试过了:

  1. Invoke-Command -Session $ session {...}
  2. 输入-PSSession -Session $ session(并输入命令)
  3. 以不同方式运行命令,通过&,Invoke-Expression,Invoke-Command,Start-Process
  4. exe始终无法连接到服务。我不确定错误的相关性,但这是异常(和内部异常)报告:

    There was no endpoint listening at net.pipe://localhost/myservice that could 
    accept the message. This is often caused by an incorrect address or SOAP action. 
    
    The pipe name could not be obtained for net.pipe://localhost/myservice .
    

    同样,当通过RDP在boxhell上运行PowerShell时,这非常有效。所以我认为可能是因为缺少$ profile,所以我在使用CMD在RDP上创建的新PowerShell内部运行:

    powershell -NoProfile -NonInteractive -File C:\test.ps1
    

    但这也有效。

    RDP和远程会话都使用相同的凭据。远程会话和在RDP中使用PowerShell之间有什么区别可能导致这种情况?

    更新:还尝试将exe调用放入服务器上的批处理文件中,然后调用该批处理文件 - 仍然是同样的错误。一切仍然指向远程会话和RDP会话之间的差异。

    Invoke-Command -Session $session {
        cd c:\mytools
        cmd.exe /c runmyexe.bat 
    }
    

    替代方法:我无法弄清楚如何找到会话之间的差异,因此我利用了已经属于我的安装脚本的重启。我写了一个bat文件并放入启动文件夹,重新启动然后删除它,全部自动。它很棒。仍然有点担心会议有所不同......

0 个答案:

没有答案