【问题标题】:PowerShell problem with array and grouping objects数组和分组对象的 PowerShell 问题
【发布时间】:2021-04-21 15:57:15
【问题描述】:

我在按环境对一组对象进行分组时遇到问题。以下脚本显示了三个环境,每个环境中都有服务器。现在,我试图按组循环这些对象,但环境名称出现错误。以下是我的示例逻辑:

$array = @(("DEVELOPMENT", ("SRV1")), ("QA", ("SRV2", "SRV3")), ("PRODUCTION", ("SRV4", "SRV5")))

ForEach ($system in $array) {
    $envName = $array[0]
    ForEach ($hostname in $system[1]) {
        Write-Host ("Result for " + $hostname + " in " + $envName)
    }
}

变量名 $envName 总是返回同样的错误结果。

[0]:"DEVELOPMENT"
[1]:"SRV1"

如何按以下方式对 $array[0] 和 $system[1] 进行分组和循环?

DEVELOPMENT = SRV1
QA          = SRV2, SRV3
PRODUCTION = SRV4, SRV5

【问题讨论】:

  • 看起来像是错字。而不是$envName = $array[0],你应该写$envName = $system[0]
  • 你是对的——我刚刚意识到这一点。谢谢

标签: arrays powershell loops foreach server


【解决方案1】:

另一种选择是创建一个对象数组而不是嵌入的字符串数组。

class Server
{
    [string]$Environment
    [string]$ServerName
}


$Development = @("SRV1")
$Qa = @("SRV2", "SRV3")
$Production = @("SRV4", "SRV5")

$Array = @()

foreach ($System in $Development)
{
    $Server = [Server]::new()
    $Server.ServerName = $System
    $Server.Environment = "Development"
    $Array += $Server
}

foreach ($System in $Qa)
{
    $Server = [Server]::new()
    $Server.ServerName = $System
    $Server.Environment = "QA"
    $Array += $Server
}

foreach ($System in $Production)
{
    $Server = [Server]::new()
    $Server.ServerName = $System
    $Server.Environment = "Production"
    $Array += $Server
}

foreach ($System in $Array)
{
    Write-Host "Result for $($System.ServerName) in $($System.Environment)"
}

【讨论】:

    【解决方案2】:

    cmets中的解决方案

    "Instead of $envName = $array[0] you should write $envName = $system[0]"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多