Удаленные переменные не сохраняются обратно в локальные переменные (см .: about_Remote_Variables ). Таким образом, даже если вы определили $counter
как $global
переменную, в рамках сеанса PowerShell это только глобально в . не доступно на удаленном компьютере. Когда вызывается Invoke-Command
, новый сеанс PowerShell создается на этом компьютере , и $counter
сбрасывается в 0. Он будет увеличиваться и возвращаться. Существующее значение переменной $counter
на локальном компьютере сохраняется и продолжается.
Когда мы посмотрим, каково значение $global:Counter
, мы должны понимать, что переменная доступна только на компьютер, на котором выполняется сценарий:
Local Computer Server1
----------------- -------------------
$global:Counter $global:Counter
_________________ ___________________
StepNumber:1 1 (0)
1
StepNumber:2 2 (0)
2
Invoke-Command -Computer Server1
|---------------->
StepNumber:3 (2) 1
1
StepNumber:4 (2) 2
2
StepNumber:5 (2) 3
3
StepNumber:6 (2) 4
4
StepNumber:7 (2) 5
5
StepNumber:8 (2) 6
6
StepNumber:9 (2) 7
7
<-----------------|
StepNumber:10 3
3
Посмотрите, как увеличивается значение $global:Counter
для шагов 1 и 2. При запуске Invoke-Computer
PowerShell создает новый сеанс PowerShell на удаленном компьютере. компьютер, где значение $global:Counter
равно 0. Вот почему вы видите значение, по-видимому, «сброс». После выполнения шагов 3-9 процесс возвращается на локальный компьютер, где значение $global:Counter
равно 2. Поэтому для шага 10 видно, что он возвращает 3.
Чтобы иметь эффективный счетчик вам нужно будет передать значение счетчика в Invoke-Command
как AgrumentList
и вернуть значение обратно.