Powershell 在 foreach 循环中处理单个数组与在 foreach 循环中处理多个数组
Powershell process single array in foreach loop versus multi aray in foreach loop
我有 3 个数组,每个数组有 3 个元素
当我 运行 它在 foreach 循环中时它工作正常并产生预期的结果
$OHSS_AU_Params = 'OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh', '66-66-66-66', '66-OHSS'
_ESC_AU_Params = 'OU=ActiveUsers,OU=Users,OU=01 Erie St. Clair,OU=CCAC,DC=test,DC=ssh', '01-01-01-01', '01-ESC'
_SW_AU_Params = 'OU=ActiveUsers,OU=Users,OU=02 South West,OU=CCAC,DC=test,DC=ssh', '02-02-02-02', '02-SW'
$All_OUs = $OHSS_AU_Params, _ESC_AU_Params, _SW_AU_Params
foreach ($OU in $All_OUs)
{
write-host "`n Search -> " $OU[0]
write-host " EmployeeID -> " $OU[1]
write-host " LegacyName -> " $OU[2]
}
输出
Search -> OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh
EmployeeID -> 66-66-66-66
LegacyName -> 66-OHSS
Search -> OU=ActiveUsers,OU=Users,OU=01 Erie St. Clair,OU=CCAC,DC=test,DC=ssh
EmployeeID -> 01-01-01-01
LegacyName -> 01-ESC
Search -> OU=ActiveUsers,OU=Users,OU=02 South West,OU=CCAC,DC=test,DC=ssh
EmployeeID -> 02-02-02-02
LegacyName -> 02-SW
但是当数组的个数变为只有一个时
$All_OUs = $OHSS_AU_Params
我明白了
Search -> O
EmployeeID -> U
LegacyName -> =
Search -> 6
EmployeeID -> 6
LegacyName -> -
Search -> 6
EmployeeID -> 6
LegacyName -> -
我如何检查数组是否是包含 3 个元素的单个数组
我尝试修改 foreach 循环,如
foreach ($OU in $All_OUs)
{
write-host "`n Search -> " @($OU)[0]
write-host " EmployeeID -> " @($OU)[1]
write-host " LegacyName -> " @($OU)[2]
}
但我仍然在循环中进行了 3 次迭代,而不是一次,但现在看起来更好了
Search -> OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh
EmployeeID ->
LegacyName ->
Search -> 66-66-66-66
EmployeeID ->
LegacyName ->
Search -> 66-OHSS
EmployeeID ->
LegacyName ->
但我需要的只是一次迭代,看起来像这样
Search -> OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh
EmployeeID -> 66-66-66-66
LegacyName -> 66-OHSS
抱歉我的英语不是最好的。
谢谢
PowerShell 这样做的原因是因为在您的第二个示例中,$All_OUs
是一个 数组,而在您的第一个示例中,$All_OUs
是一个 数组的数组.
您可以通过添加 Comma operator ,
:
强制 $All_OUs
成为数组的 数组
$OHSS_AU_Params = 'OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh', '66-66-66-66', '66-OHSS'
$All_OUs = , $OHSS_AU_Params
foreach ($OU in $All_OUs) {
Write-Host "`n Search -> " $OU[0]
Write-Host " EmployeeID -> " $OU[1]
Write-Host " LegacyName -> " $OU[2]
}
但是,更可靠的方法是使用 hash table,这样您就无需验证 集合 是否为 array 或 array of arrays:
$toProcess = @{
'OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh' = '66-66-66-66', '66-OHSS'
'OU=ActiveUsers,OU=Users,OU=01 Erie St. Clair,OU=CCAC,DC=test,DC=ssh' = '01-01-01-01', '01-ESC'
'OU=ActiveUsers,OU=Users,OU=02 South West,OU=CCAC,DC=test,DC=ssh' = '02-02-02-02', '02-SW'
}
foreach ($key in $toProcess.PSBase.Keys) {
# => `$values` is the array with EmployeeID and LegacyName for each `$key` (OU)
$values = $toProcess[$key]
Write-Host "`n Search -> " $key
Write-Host " EmployeeID -> " $values[0]
Write-Host " LegacyName -> " $values[1]
}
我有 3 个数组,每个数组有 3 个元素
当我 运行 它在 foreach 循环中时它工作正常并产生预期的结果
$OHSS_AU_Params = 'OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh', '66-66-66-66', '66-OHSS'
_ESC_AU_Params = 'OU=ActiveUsers,OU=Users,OU=01 Erie St. Clair,OU=CCAC,DC=test,DC=ssh', '01-01-01-01', '01-ESC'
_SW_AU_Params = 'OU=ActiveUsers,OU=Users,OU=02 South West,OU=CCAC,DC=test,DC=ssh', '02-02-02-02', '02-SW'
$All_OUs = $OHSS_AU_Params, _ESC_AU_Params, _SW_AU_Params
foreach ($OU in $All_OUs)
{
write-host "`n Search -> " $OU[0]
write-host " EmployeeID -> " $OU[1]
write-host " LegacyName -> " $OU[2]
}
输出
Search -> OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh
EmployeeID -> 66-66-66-66
LegacyName -> 66-OHSS
Search -> OU=ActiveUsers,OU=Users,OU=01 Erie St. Clair,OU=CCAC,DC=test,DC=ssh
EmployeeID -> 01-01-01-01
LegacyName -> 01-ESC
Search -> OU=ActiveUsers,OU=Users,OU=02 South West,OU=CCAC,DC=test,DC=ssh
EmployeeID -> 02-02-02-02
LegacyName -> 02-SW
但是当数组的个数变为只有一个时
$All_OUs = $OHSS_AU_Params
我明白了
Search -> O
EmployeeID -> U
LegacyName -> =
Search -> 6
EmployeeID -> 6
LegacyName -> -
Search -> 6
EmployeeID -> 6
LegacyName -> -
我如何检查数组是否是包含 3 个元素的单个数组
我尝试修改 foreach 循环,如
foreach ($OU in $All_OUs)
{
write-host "`n Search -> " @($OU)[0]
write-host " EmployeeID -> " @($OU)[1]
write-host " LegacyName -> " @($OU)[2]
}
但我仍然在循环中进行了 3 次迭代,而不是一次,但现在看起来更好了
Search -> OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh
EmployeeID ->
LegacyName ->
Search -> 66-66-66-66
EmployeeID ->
LegacyName ->
Search -> 66-OHSS
EmployeeID ->
LegacyName ->
但我需要的只是一次迭代,看起来像这样
Search -> OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh
EmployeeID -> 66-66-66-66
LegacyName -> 66-OHSS
抱歉我的英语不是最好的。
谢谢
PowerShell 这样做的原因是因为在您的第二个示例中,$All_OUs
是一个 数组,而在您的第一个示例中,$All_OUs
是一个 数组的数组.
您可以通过添加 Comma operator ,
:
$All_OUs
成为数组的 数组
$OHSS_AU_Params = 'OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh', '66-66-66-66', '66-OHSS'
$All_OUs = , $OHSS_AU_Params
foreach ($OU in $All_OUs) {
Write-Host "`n Search -> " $OU[0]
Write-Host " EmployeeID -> " $OU[1]
Write-Host " LegacyName -> " $OU[2]
}
但是,更可靠的方法是使用 hash table,这样您就无需验证 集合 是否为 array 或 array of arrays:
$toProcess = @{
'OU=ActiveUsers,OU=OHSS_Users,OU=OHSS,OU=HCCSS,DC=test,DC=ssh' = '66-66-66-66', '66-OHSS'
'OU=ActiveUsers,OU=Users,OU=01 Erie St. Clair,OU=CCAC,DC=test,DC=ssh' = '01-01-01-01', '01-ESC'
'OU=ActiveUsers,OU=Users,OU=02 South West,OU=CCAC,DC=test,DC=ssh' = '02-02-02-02', '02-SW'
}
foreach ($key in $toProcess.PSBase.Keys) {
# => `$values` is the array with EmployeeID and LegacyName for each `$key` (OU)
$values = $toProcess[$key]
Write-Host "`n Search -> " $key
Write-Host " EmployeeID -> " $values[0]
Write-Host " LegacyName -> " $values[1]
}