【问题标题】:Use Variable as Value使用变量作为值
【发布时间】:2019-03-21 05:50:03
【问题描述】:

我有一个问题,因为我不能在 PowerShell 的哈希表上使用变量作为值。

我有两个变量。

  1. 从 AD 中获取 UserPrincipalName 并添加到 $alias

    $alias = (Get-ADUser -Server "Add Server" -filter * -SearchBase "Add OU").userprincipalname
    
  2. 然后使用$alias,我需要以MB 为单位获取Get-MailboxGet-MailboxStatistics 的邮箱配额并计算百分比

    $mailbox = foreach ($user in $alias) {
        ($user | Get-MailboxStatistics |
            Select-Object @{name="TotalItemSize (MB)"; expression={
                [Math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)
            }})."TotalItemSize (MB)"
    }
    
    • 使用这个最大值。配额(MB 上 100 GB)

      $maxquota = 102400
      
    • 获取 %

      $totalsize = foreach ($size in $mailbox) { 
          (($size * 100) / $maxquota)
      }
      

    邮箱大小示例

    PS> $总大小 2.43220703125 14.3363671875 8.875205078125 5.032177734375 15.548349609375 0.0112109375
  3. 然后我想用$alias$totalsize做一个哈希表

    $test = foreach ($name in $alias) {
        foreach($total in $totalsize){}
        @{$name = $total}
    }
    
  4. 结果应该是

    密钥 - $alias中的名称
    价值 - 在$total 中的百分比

    例如:

    大卫 - 4.50 胡安 - 15.00 莫伊斯 - 50

但是当我测试哈希表时,我只是接收到带有所有值的每个名称或仅带有第一个值的所有名称

我怎样才能像表格一样获取所有值?

【问题讨论】:

    标签: powershell variables key hashtable


    【解决方案1】:

    您将$Test 设置为哈希表数组。分配您的$Hashtable,然后使用Add 方法为其添加值:

    Param (
        $maxquota = 102400
    )
    
    $HashTable = @{}
    
    $alias = (Get-ADUser -Server "Add Server" -filter * -SearchBase "Add OU").userprincipalname
    $mailbox = Foreach ($user in $alias) {($user | Get-MailboxStatistics |  Select-Object @{name="TotalItemSize (MB)"; expression={[math]::Round(($_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")/1MB),2)}})."TotalItemSize (MB)"}
    $totalsize = foreach ($size in $mailbox) { 
        (($size * 100) / $maxquota)
    }
    
    $test = Foreach($name in $alias){
        $HashTable.Add($Name,$totalsize)
    }
    

    【讨论】:

      【解决方案2】:

      步骤 3 中的代码不会创建哈希表,而是创建哈希表数组。此外,它不知道哪个邮箱大小属于哪个用户,因为在第 2 步之后该信息会丢失。

      这样的事情应该做你想做的事:

      $test = @{}   # create new empty hashtable
      
      foreach ($user in $alias) {
          $size = Get-MailboxStatistics -Identity $user |
                  Select-Object @{n='TotalItemSize (MB)';e={...}} |
                  Select-Object -Expand 'TotalItemSize (MB)'
      
          $test[$user] = ($size * 100) / $maxquota
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2017-10-24
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        相关资源
        最近更新 更多