Ограничить несколько выполнений одного и того же скрипта - PullRequest
1 голос
/ 11 апреля 2019

Я пытался ограничить несколько выполнений одного и того же сценария в PowerShell. Я пробовал следующий код. Сейчас это работает, но главный недостаток заключается в том, что когда я закрываю окно PowerShell и пытаюсь снова запустить тот же сценарий, он снова запускается.

Код:

$history = Get-History
Write-Host "history=" $history.Length
if ($history.Length -gt 0) {
    Write-Host "this script already run using History"
    return
} else {
    Write-Host "First time using history"
}

Как мне избежать этого недостатка?

1 Ответ

1 голос
/ 11 апреля 2019

Полагаю, вы хотите убедиться, что скрипт не запущен из разных процессов PowerShell, а не из того же самого, что и самозвонок.

В любом случае ничего не происходит вPowerShell для этого, так что вам нужно имитировать семафор.

Для того же процесса вы можете использовать глобальную переменную и обернуть ваш скрипт вокруг блока try / finally

$variableName="Something unique"
try
{
  if(Get-Variable -Name $variableName -Scope Global -ErrorAction SilentlyContinue)
  {
     Write-Warning "Script is already executing"
     return
  }
  else
  {
     Set-Variable -Name $variableName -Value 1 -Scope Global
  }
  # The rest of the script
}
finally
{
   Remove-Variable -Name $variableName -ErrorAction SilentlyContinue
}

Теперь, если вы хотите сделать то же самое, вам нужно сохранитьчто-то вне вашего процесса.Файл был бы хорошей идеей с подобным образом мышления, используя Test-Path, New-Item и Remove-Item.

В любом случае, обратите внимание, что этот трюк, имитирующий семафоры, не такой жесткий, как настоящий семафор, и может протекать.

...