Powershell远程调用命令启动进程应用程序在启动后立即关闭

时间:2012-02-11 01:16:30

标签: powershell powershell-remoting invoke-command start-process

我正在编写一个脚本来远程终止两个进程,删除一些文件夹,并将服务作为应用程序启动。最终,这将被部署为针对多个服务器运行,但我目前正在针对单个服务器进行测试。一切都很有效,除了最后一步是启动远程服务(由于与作为服务运行的一些兼容性问题而使用-cl参数作为应用程序运行)。应用程序通过脚本启动,但在脚本继续执行下一步时立即关闭。我是一个总菜鸟,所以我一直在挖掘很多但是没有找到解决方案的运气。看起来我最终可能不得不在一个新的运行空间中启动这个过程,但我也没有运气找到一个好的菜鸟指南。

此脚本在本地化并在计算机上运行时也能正常运行。

这就是我所拥有的

$a = Get-ChildItem "\\TestMachine\c$\DataFiles"

$pass = cat "C:\cred.txt" | convertto-securestring 

$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "username",$pass

if ($a.Count -gt 10)
{
Invoke-Command -ComputerName TestMachine -cred $mycred -scriptBlock {stop-process -name TestProcess -force -EA SilentlyContinue}

Invoke-Command -ComputerName TestMachine -cred $mycred -scriptBlock {stop-process -name Winword -force -EA SilentlyContinue}

Get-ChildItem -Path \\TestMachine\c$\WordDocs -Recurse -EA SilentlyContinue | Where-Object {$_.PsIsContainer} | Remove-Item -Recurse -Force -EA SilentlyContinue

Invoke-Command -ComputerName TestMachine -cred $mycred -scriptBlock {Start-Process "C:\Program Files (x86)\Test\TestUploadManager\TestUploadManager.exe" -Verb Runas -ArgumentList -cl}

echo "Success: TestMachine Was successfully reset"
}

else

{
echo "Failed: Reset was not necessary"
}

exit

5 个答案:

答案 0 :(得分:1)

您可以尝试使用Enter-PSSession打开远程会话,然后使用不带Start-Process的cmdlet Invoke-Command

您也可以像& "C:\Program Files (x86)\Test\TestUploadManager\TestUploadManager.exe" -cl一样运行程序(在远程会话中)

最后,您应该使用Exit-PSSession

退出会话

另一种可能性是在本地"运行脚本"。像在本地计算机上运行脚本一样编写脚本。将其复制到可访问的共享。然后使用远程方法在计算机上运行脚本。

答案 1 :(得分:1)

汤姆建议的解决方案适合我。以下是我使用的命令:

  New-PSSession -computername TestMachine
  Start-Process yourservice.exe
  Exit-PSSession

请务必使用Exit-PSSession而不是Remove-PSSession,以便在退出会话后流程yourservice.exe仍然有效。

答案 2 :(得分:0)

在Start-Process调用中尝试使用-Wait参数。

答案 3 :(得分:0)

我有完全相同的问题。通过child_class[WMICLASS] 's create()的组合,让它干净利落地工作。

检查我的回答here

答案 4 :(得分:0)

这个WMI解决方案最适合我: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/ead19612-5e7b-4012-8466-0d650232c7a5/invokecommand-and-startprocess?forum=ITCG - Adam Driscoll(指向相同的链接)

使用:

([WMICLASS]"\\localhost\ROOT\CIMV2:win32_process").Create("something.exe argument1Here")

而不是:

Start-Process