Полагаю, вы хотите убедиться, что скрипт не запущен из разных процессов 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
.
В любом случае, обратите внимание, что этот трюк, имитирующий семафоры, не такой жесткий, как настоящий семафор, и может протекать.