Не используйте Write-Host, если вы планируете использовать данные в другом месте.
Write-host не нужен для отправки вывода на экран, то есть по умолчанию PowerShell. Если вы абсолютно «хотите» использовать запись по каким-либо причинам, выберите вместо нее «Запись-Вывод».
Вы можете назначить переменную и одновременно вывести на экран, используя сжатие переменной. Тем не менее, действительно, делайте это только для сеансов разработки и отладки или если вы действительно планируете постоянно выводить этот вывод на экран.
Покажите ожидаемые результаты, вместо того, чтобы заставлять людей предполагать или угадывать. Какие ошибки происходят? Когда я делаю это с вашим примером, результаты получаются без ошибок, хотя есть несколько странных форматов.
# Simple string only needs single quotes. Double is for expansion needs and specific formatting
$Org = 'MyOrgName'
$CMMI = 'MyCMMIThingy'
$Pages = 'C.Bug','C.Change','C.Epic'
$WorkItems = 'Bug','Change','Epic'
ForEach ($WorkItemTypes in $WorkItems) # This will happen 3 times
{
# Assign the results to the variable for later use, while outputting to the screen
'*'*60
"*** Processing worktypes named $WorkItemTypes ***"
'*'*60
($uriProcess2 = "https://dev.azure.com/$Org/_apis/work/processes/$CMMI/workItemTypes/$WorkItemTypes/layout/pages/")
ForEach ($PageTypes in $Pages) # This will happen 3 times for each of $WorkItems
{
# Assign the results to the variable for later use, while outputting to the screen
'*'*60
"*** Processing page types name $PageTypes for worktypes named $WorkItemTypes for the Invoke command ***"
'*'*60
($uriProcess3 = "$PageTypes/sections/Section3/groups?api-version=5.0-preview.1")
<#
Assign the results to the variable for later use, while outputting to the screen
Using splatting for readability
#>
($uriProcess = $uriProcess2 + $uriProcess3)
<#
$invokeRestMethodSplat = @{
ContentType = 'application/json'
Method = 'POST'
Body = $projectProcessConfiguration
Headers = $AzureDevOpsAuthenicationHeader
Uri = $uriProcess
}
Invoke-RestMethod @invokeRestMethodSplat
#>
}
}
<#
# Results
************************************************************
*** Processing worktypes named Bug ***
************************************************************
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Bug/layout/pages/
************************************************************
*** Processing page types name C.Bug for worktypes named Bug for the Invoke command ***
************************************************************
C.Bug/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Bug/layout/pages/C.Bug/sections/Section3/groups?api-version=5.0-preview.1
************************************************************
*** Processing page types name C.Change for worktypes named Bug for the Invoke command ***
************************************************************
C.Change/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Bug/layout/pages/C.Change/sections/Section3/groups?api-version=5.0-preview.1************************************************************
*** Processing page types name C.Epic for worktypes named Bug for the Invoke command ***
************************************************************
C.Epic/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Bug/layout/pages/C.Epic/sections/Section3/groups?api-version=5.0-preview.1
************************************************************
*** Processing worktypes named Change ***
************************************************************
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Change/layout/pages/
************************************************************
*** Processing page types name C.Bug for worktypes named Change for the Invoke command ***
************************************************************
C.Bug/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Change/layout/pages/C.Bug/sections/Section3/groups?api-version=5.0-preview.1************************************************************
*** Processing page types name C.Change for worktypes named Change for the Invoke command ***
************************************************************
C.Change/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Change/layout/pages/C.Change/sections/Section3/groups?api-version=5.0-preview.1
************************************************************
*** Processing page types name C.Epic for worktypes named Change for the Invoke command ***
************************************************************
C.Epic/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Change/layout/pages/C.Epic/sections/Section3/groups?api-version=5.0-preview.1
************************************************************
*** Processing worktypes named Epic ***
************************************************************
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Epic/layout/pages/
************************************************************
*** Processing page types name C.Bug for worktypes named Epic for the Invoke command ***
************************************************************
C.Bug/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Epic/layout/pages/C.Bug/sections/Section3/groups?api-version=5.0-preview.1
************************************************************
*** Processing page types name C.Change for worktypes named Epic for the Invoke command ***
************************************************************
C.Change/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Epic/layout/pages/C.Change/sections/Section3/groups?api-version=5.0-preview.1
************************************************************
*** Processing page types name C.Epic for worktypes named Epic for the Invoke command ***
************************************************************
C.Epic/sections/Section3/groups?api-version=5.0-preview.1
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Epic/layout/pages/C.Epic/sections/Section3/groups?api-version=5.0-preview.1
#>
Вы получаете 3 элемента для каждого, потому что это то, о чем вы просите делать через вложенный l oop.
Всякий раз, когда вы работаете для отладки итераций / циклов, всегда go с наименьшим количеством кода, чтобы убедиться, что вы получаете базовые результаты, которые вы после .. .
$Pages = 'C.Bug','C.Change','C.Epic'
$WorkItems = 'Bug','Change','Epic'
ForEach ($WorkItemTypes in $WorkItems)
{
" Work type is `"$WorkItemTypes`""
ForEach ($PageTypes in $Pages)
{"Page type is $PageTypes and work type is `"$WorkItemTypes`""}
}
<#
# Results
Work type is "Bug"
Page type is C.Bug and work type is "Bug"
Page type is C.Change and work type is "Bug"
Page type is C.Epic and work type is "Bug"
Work type is "Change"
Page type is C.Bug and work type is "Change"
Page type is C.Change and work type is "Change"
Page type is C.Epic and work type is "Change"
Work type is "Epic"
Page type is C.Bug and work type is "Epic"
Page type is C.Change and work type is "Epic"
Page type is C.Epic and work type is "Epic"
#>
Обновление
В соответствии с моим комментарием к вам, выполните это действие, потому что, как написано в вашем комментарии, я понятия не имею, что это должно быть ...
В конечном итоге я хочу получить это в качестве вывода: Тип работы "Ошибка" Тип страницы C. Ошибка и тип работы "Ошибка" Тип работы - «Изменить». Тип страницы - C. Изменить и тип работы - «Изменить». Тип работы - «Epi c». Тип страницы - C .Epi c, а тип работы - «Эпи c». "
... или действительно означает для вас конечные результаты варианта использования. Тем не менее, все oop никогда не будут обрабатывать таким образом, каким и каким образом вы его предоставили.
Даже если разбить это на сегменты, я сейчас почесал голову.
Work type is "Bug" Page type is C.Bug
and
work type is "Bug"
Work type is "Change" Page type is C.Change
and
work type is "Change"
Work type is "Epic" Page type is C.Epic
and
work type is "Epic"
Вы перебираете список, каждый элемент обрабатывается только один раз. Если бы я сделал часть того, что у вас здесь, как al oop, используя многомерный массив, вы можете сделать это.
Clear-Host
$Org = 'MyOrgName'
$CMMI = 'MyCMMIThingy'
$Counter = -1
# Using multi-dimentional arrays
$WorkItems = @('Bug','Change','Epic'),@('C.Bug','C.Change','C.Epic')
$WorkItems[0] |
ForEach{
$Counter++
($uriProcess2 = "https://dev.azure.com/$Org/_apis/work/processes/$CMMI/workItemTypes/$($WorkItems[0][$Counter])/layout/pages/$($WorkItems[1][$Counter])")
}
<#
# Results
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Bug/layout/pages/C.Bug
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Change/layout/pages/C.Change
https://dev.azure.com/MyOrgName/_apis/work/processes/MyCMMIThingy/workItemTypes/Epic/layout/pages/C.Epic
#>