Насколько я понимаю документация PowerShell Scopes, должна быть возможность назначать $using
переменным области действия из потоков, запущенных с использованием Start-ThreadJob
. В документации сказано (выделено моим):
Модификатор области действия
Using
поддерживается в следующих контекстах:
- ...
- Задания потока, запущенные через
Start-ThreadJob
илиForEach-Object -Parallel
(отдельный сеанс потока)В зависимости от контекста значения встроенных переменных являются либо независимыми копиями данных в области действия вызывающего объекта, либо ссылками на них.
...
В сеансах потоков они передаются по ссылке. Это означает, что переменные области вызова можно изменять в другом потоке. Для безопасного изменения переменных требуется синхронизация потоков.
Тем не менее, следующее не запускается:
$foo = 1
Start-ThreadJob {
Write-Host $using:foo
$using:foo = 2
} | Wait-Job | Out-Null
Write-Host $foo
Это ошибка на $using:foo = 2
с:
Недопустимое выражение присваивания. Входными данными для оператора присваивания должен быть объект, способный принимать присваивания, например переменная или свойство.
Печать переменной с Write-Host $using:foo
работает корректно.
Я использую PowerShell 7.1.