PowerShell:Start-Process的另一个实例已经在运行

时间:2014-09-23 21:09:01

标签: powershell cmdlet startupscript start-process

有两个PowerShell脚本在启动时运行,1个在我的控制之下,另一个在我的控制之外。

我们的两个脚本都使用Start-Process。奇怪的问题是如果我们的两个Start-Process都同时执行,我的脚本会出现以下错误:

Start-Process : This command cannot be run due to the error: An instance of the service is already running.

有没有办法看看是否有另一个" Start-Process"已经运行?我知道" Get-Process"但只显示PowerShell正在运行,而不是当前正在运行的cmdlet。

我不赞成不使用Start-Process。

作为一种临时解决方法,我告诉我的脚本要睡60秒,但是当其他启动过程完成时我宁愿知道。

这是我的代码:

$pw = ConvertTo-SecureString -AsPlainText -Force -String "myPassword"
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "Administrator",$pw

$psArgList = "-ExecutionPolicy Bypass","-file"
$psArgList += $args

Start-Process powershell.exe -Wait -Credential $cred -ArgumentList $psArgList

这允许我以完全权限运行另一个PowerShell脚本:将Admin with ExecutionPolicy作为Bypass。

1 个答案:

答案 0 :(得分:1)

我想建议一个替代方案。如果您在登录时运行此操作,为什么不从任务计划程序运行它,并将其作为您要使用凭据的帐户运行?创建任务时,您需要设置一些内容。

在“常规”选项卡上

  • 选择要将任务作为
  • 运行的帐户
  • 告诉它“运行用户是否登录”
  • 选择“以最高权限运行”

在“触发器”选项卡上

  • 创建一个触发器,使偶数发生在“登录时”并选择用户,或让任何用户发生这种情况(默认)

在“操作”选项卡上

  • 制作动作
  • 对于应用程序,只需将powershell.exe(如果您愿意,请使用完整路径)
  • 在参数字段中输入您的参数,例如“-ExecutionPolicy Bypass -File”

然后点击OK。它会提示您输入您尝试运行脚本的帐户的密码,Windows将从那里管理它。