我正在编写一个脚本来远程终止两个进程,删除一些文件夹,并将服务作为应用程序启动。最终,这将被部署为针对多个服务器运行,但我目前正在针对单个服务器进行测试。一切都很有效,除了最后一步是启动远程服务(由于与作为服务运行的一些兼容性问题而使用-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
答案 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