#powershell #foreach #increment #start-job #scriptblock
#powershell #foreach #увеличение #запуск-задание #scriptblock
Вопрос:
Я надеюсь, что кто-нибудь сможет обнаружить ошибку:
Это небольшая функция внутри более крупного скрипта.
Я хочу, чтобы оно увеличивалось $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
}
}
Ответ №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
Взгляните на документацию о областях
Комментарии:
1. Но не имеет значения, как я пытаюсь обновить глобальный $ i, он просто не хочет