0

有 2 个 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.

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

我不赞成不使用 Start-Process。

作为一种临时解决方法,我告诉我的脚本休眠 60 秒,但宁愿知道其他 Start-Process 何时完成。

这是我的代码:

$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 脚本:以管理员身份使用 ExecutionPolicy 作为绕过。

4

1 回答 1

1

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

在常规选项卡上

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

在触发器选项卡上

  • 创建一个触发器,以便甚至发生“登录时”并选择哪些用户,或者让它为任何用户发生(默认)

在操作选项卡上

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

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

于 2014-09-23T22:59:43.003 回答