Увеличение внутри foreach и scriptblock в Powershell

Я надеюсь, что кто-то может найти ошибку:

Это небольшая функция внутри большого скрипта.

Я хочу, чтобы он увеличивал $i каждый раз, когда он повторяет foreach, но я не могу заставить его работать. Если я запускаю только строку, в которой присутствует $i++, она будет увеличиваться. Сообщение поступает к пользователям, поэтому оно работает нормально, просто игнорирует $i++.

$i = 0

function Message {

    start-job -Name Col01 -InitializationScript{Import-Module RemoteDesktop} -ScriptBlock{$Users = Get-RDUserSession -ConnectionBroker $ActiveConnectionBroker -CollectionName "col01"

    foreach ($User in $Users) {

        Send-RDUserMessage -UnifiedSessionID $User.UnifiedSessionId -HostServer $User.HostServer -MessageTitle "Info" -MessageBody $using:message

        $i++
    }
}

person user3170375    schedule 17.10.2020    source источник


Ответы (1)


У вас есть две переменные с одинаковым именем $i.

Один из них глобальный, а второй локальный.

Вот пример, который показывает, что происходит и как вы можете изменить глобальную переменную внутри функции (когда вы указываете квалификатор области видимости):

$i = 777

Write-Output "outside i: $i"

function do_something {

    $i=41
    for( $z=0 ; $z -lt 10 ; $z++ ){
      $global:i++
      $i++
      Write-Output "inside i: $i $global:i"
    }

}


do_something

Write-Output "i: $i"

Вот вывод, который создается вышеупомянутым кодом

outside i: 777
inside i: 42 778
inside i: 43 779
inside i: 44 780
inside i: 45 781
inside i: 46 782
inside i: 47 783
inside i: 48 784
inside i: 49 785
inside i: 50 786
inside i: 51 787
outside i: 787

Взгляните на документация по областям

person Maxim Sagaydachny    schedule 20.10.2020
comment
Но неважно, как я пытаюсь обновить глобальный $i, он просто не хочет - person user3170375; 23.10.2020