每个循环的基本编程

Basic Programming For Each Loop

为了做这件极其简单的事情,我已经伤透脑筋很久了,但我不知道怎么做。我正在尝试在 PowerShell 中解决这个问题。

$IncidentID="INC0010164~INC0010165"
$arrIncidentID = $IncidentID -split '~'
$SysID = "d80fd7e2dbab4300479a7e7dbf96195d~7f0f97e2dbab4300479a7e7dbf9619ec"
$arrSystemID = $SysID -split '~'

if ($arrIncidentID.Length -eq $arrSystemID.Length) {
    for ($i=0; $i -lt $arrIncidentID.length; $i++) {
        "The Incident ID is $arrIncidentID[$i] "
        "The URL is $arrSystemID[$i]"
    }
}

我得到的结果是

The Incident ID is INC0010164 INC0010165[0] 
The URL is d80fd7e2dbab4300479a7e7dbf96195d 7f0f97e2dbab4300479a7e7dbf9619ec[0]
The Incident ID is INC0010164 INC0010165[1] 
The URL is d80fd7e2dbab4300479a7e7dbf96195d 7f0f97e2dbab4300479a7e7dbf9619ec[1]

不过,我喜欢的格式如下:

Incident ID 1: - INC0010164
SystemID 1: - d80fd7e2dbab4300479a7e7dbf96195d

Incident ID 2: - INC0010165 
SystemID 2: - 7f0f97e2dbab4300479a7e7dbf9619ec
$IncidentID="INC0010164~INC0010165"
$arr = $IncidentID.Split("~")
foreach($val in $arr) {echo $val}
INC0010164
INC0010165

工作起来很有魅力?

考虑使用 format operator (-f):

for ($i=0; $i -lt $arrIncidentID.Length; $i++) {
    "Incident ID {0}: - {1}`nSystemID {0}: - {2}" -f ($i+1), $arrIncidentID[$i], $arrSystemID[$i]
}

此答案旨在让您的代码发挥作用并帮助您了解代码无法正常工作的原因。

理解错误

在字符串中使用变量并将其替换为它的值称为字符串插值。在 PowerShell 中,插值变量本身很容易。您也可以插入语句,但您需要一些不同的语法(即 $())。

$IncidentID="INC0010164~INC0010165"
$arrIncidentID = $IncidentID -split '~'
$SysID = "d80fd7e2dbab4300479a7e7dbf96195d~7f0f97e2dbab4300479a7e7dbf9619ec"
$arrSystemID = $SysID -split '~'

if ($arrIncidentID.Length -eq $arrSystemID.Length) {
    for ($i=0; $i -lt $arrIncidentID.length; $i++) {
        "The Incident ID is $($arrIncidentID[$i]) "
        "The URL is $($arrSystemID[$i])"
    }
}

新的结果是:

The Incident ID is INC0010164
The URL is d80fd7e2dbab4300479a7e7dbf96195d
The Incident ID is INC0010165
The URL is 7f0f97e2dbab4300479a7e7dbf9619ec

更好的输出

因此,为了获得您想要的最终输出,您可以将代码稍微调整为:

$IncidentID="INC0010164~INC0010165"
$arrIncidentID = $IncidentID -split '~'
$SysID = "d80fd7e2dbab4300479a7e7dbf96195d~7f0f97e2dbab4300479a7e7dbf9619ec"
$arrSystemID = $SysID -split '~'

if ($arrIncidentID.Length -eq $arrSystemID.Length) {
    for ($i=0; $i -lt $arrIncidentID.length; $i++) {
        "Incident ID $($i+1): - $($arrIncidentID[$i]) "
        "SystemID $($i+1): - $($arrSystemID[$i])"
    }
}
Incident ID 1: - INC0010164
SystemID 1: - d80fd7e2dbab4300479a7e7dbf96195d

Incident ID 2: - INC0010165 
SystemID 2: - 7f0f97e2dbab4300479a7e7dbf9619ec

PowerShell 之道

您应该考虑以更 PowerShell 的方式执行此操作,以便更轻松地重用输出:

$IncidentID="INC0010164~INC0010165"
$arrIncidentID = $IncidentID -split '~'
$SysID = "d80fd7e2dbab4300479a7e7dbf96195d~7f0f97e2dbab4300479a7e7dbf9619ec"
$arrSystemID = $SysID -split '~'

if ($arrIncidentID.Length -eq $arrSystemID.Length) {
    for ($i=0; $i -lt $arrIncidentID.length; $i++) {
        New-Object PSObject -Property @{
            IncidentID = $arrIncidentID[$i]
            SystemID = $arrSystemID[$i]
        }
    }
}
IncidentID SystemID
---------- --------
INC0010164 d80fd7e2dbab4300479a7e7dbf96195d
INC0010165 7f0f97e2dbab4300479a7e7dbf9619ec

这些现在是您可以通过 属性 名称引用的对象。