Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用变量作为值_Powershell_Variables_Key_Hashtable - Fatal编程技术网

Powershell 使用变量作为值

Powershell 使用变量作为值,powershell,variables,key,hashtable,Powershell,Variables,Key,Hashtable,我有一个问题,因为我不能在PowerShell的哈希表上使用变量作为值 我有两个变量 从AD获取UserPrincipalName并添加到$alias $alias = (Get-ADUser -Server "Add Server" -filter * -SearchBase "Add OU").userprincipalname 然后使用$alias我需要使用get mailbox和get MailboxStatistics以MB为单位获取邮箱配额,并获取一个百分比 $mailbox =

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

我有两个变量

  • 从AD获取UserPrincipalName并添加到
    $alias

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

    $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)

    • 获得%

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

    PS> $totalsize 2.43220703125 14.3363671875 8.875205078125 5.032177734375 15.548349609375 0.0112109375
  • 结果应该是

    键-名称在
    $alias

    值-占<代码>$总数的百分比

    例如:

    David - 4.50 Juan - 15.00 Moises - 50 大卫-4.50 胡安-15.00 莫伊斯-50
  • 但是,当我测试哈希表时,我只接收每个名称和所有值,或者所有名称只接收第一个值


    如何像表一样获取所有值?

    您正在将
    $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)
    }
    

    您正在将
    $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)
    }
    

    步骤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
    }
    

    步骤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
    }