Документация дает смешанную информацию, и цитируемый раздел в вопросе определенно устарел / неверен.
Раздел справки, который дает правильную информацию, находится под -NoNewScope
, в котором говорится:
Указывает, что этот командлет выполняет указанную команду в текущей области.По умолчанию Invoke-Command выполняет команды в своей собственной области.
Этот параметр действителен только в командах, которые выполняются в текущем сеансе, то есть в командах, в которых пропущены параметры ComputerName и Session.
Этот параметр был введен в Windows PowerShell 3.0.
Ниже показана правильная информация о области из -NoNewScope
(продемонстрировано с пронумерованными областями):
$TestVar = 99
Invoke-Command { Get-Variable TestVar -Scope 0 } #Scope 0, current scope
Invoke-Command { Get-Variable TestVar -Scope 1 } #Scope 1, parent scope
Invoke-Command { Get-Variable TestVar -Scope 0 } -NoNewScope #Scope 0, current scope
Результатыиз первой команды вернет ошибку, говорящую, что переменная не может быть найдена:
PS C:\> Invoke-Command { Get-Variable TestVar -Scope 0 } #Scope 0, current scope
Get-Variable : Cannot find a variable with the name 'TestVar'.
Другие команды вернут информацию о переменной, как и ожидалось.Однако, как упоминалось в комментарии к другому сообщению, -NoNewScope
должен использоваться для явного указания Invoke-Command
использовать текущую область, иначе он будет работать в дочерней области по умолчанию.
ТолькоПричина, по которой команда в вопросе сработала, заключается в том, что переменные доступны для дочерних областей по умолчанию, и не нужно объявлять область видимости, поскольку не использовался ни параметр -ComputerName
, ни -Session
.