Очевидно, Install-Module
- это полностью НЕ БЕЗОПАСНО для запуска во время сборки, когда несколько сборок выполняются на одном и том же агенте. Похоже, использование названного Mutex - самый безопасный подход.
РЕДАКТИРОВАТЬ 1
В многопоточных средах вызов следующих команд небезопасен без явного мьютекса:
Install-Module
Import-Module
Get-PSRepository
без аргументов
Может быть, больше. В своем коде я вызываю все три команды и обнаружил, что все они вместе должны находиться в одном мьютексе, то есть эти комбинации не работают:
Не работает # 1
$mtx.WaitOne()
try
{
Install-Module ...
}
finally
{
$mtx.ReleaseMutex()
}
Import-Module ...
Get-PSRepository ...
Не работает # 2
$mtx.WaitOne()
try
{
Install-Module ...
Import-Module ...
}
finally
{
$mtx.ReleaseMutex()
}
Get-PSRepository
Похоже, что единственная безопасная опция:
$mtx.WaitOne()
try
{
Install-Module ...
Import-Module ...
Get-PSRepository
}
finally
{
$mtx.ReleaseMutex()
}
Что удивительно, потому что я не ожидаю, что Install-Module
или Import-Module
повлияет на Get-PSRepository
, но каким-то образом они влияют:
ParameterBindingException: A parameter cannot be found that matches parameter name 'Provider'.
at Get-PSRepository<Process>, C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1: line 4496
at Use-ModuleFB22C60E, C:\Users\mkharitonov\AppData\Local\Temp\fb22c60e-a0c5-48b3-953a-0b580c6a2f5e\m_deadbeef_.ps1: line 167
at <ScriptBlock>, <No file>: line 4