Используйте переменную как значение - PullRequest
0 голосов
/ 16 октября 2018

У меня есть вопрос, потому что я не могу использовать переменную в качестве значений в хэш-таблице в PowerShell.

У меня есть две переменные.

  1. Чтобы получить UserPrincipalName из ADи добавьте к $alias

    $alias = (Get-ADUser -Server "Add Server" -filter * -SearchBase "Add OU").userprincipalname
    
  2. Затем с $alias мне нужно получить квоту почтового ящика с Get-Mailbox и Get-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)"
    }
    
    • При использовании этого макс.квота (100 ГБ на МБ)

      $maxquota = 102400
      
    • Для получения%

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

    Пример MailboxSize

    PS> $totalsize
    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

    Например:

    David  - 4.50
    Juan   - 15.00
    Moises - 50
    

Но когда я проверяю хеш-таблицу, япросто получая каждое имя со всеми значениями или все имена только с первым значением

Как я могу получить все значения в виде таблицы?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Код на шаге 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
}
0 голосов
/ 16 октября 2018

Вы устанавливаете $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)
}
...