2015-08-12 4 views
2

У меня есть переменная в Powershell, которые я использую для создания списка других переменных все установленные к нулю, как так:Приращение динамической переменной в Powershell

$DivList= "A","B","C" 
Foreach($Div in $DivList) 
{ 
    New-Variable -Name "P1$div" -Value 0 
    New-Variable -Name "E1$div" -Value 0 
    New-Variable -Name "E3$div" -Value 0 
} 

я использую эти переменные, чтобы сделать подсчет, какой тип лицензий у нас есть. Поэтому я затем перебираю каждое из разделов, и я хочу просто добавить 1 к соответствующей переменной, если у пользователя есть эта лицензия и находится в этом разделе. Таким образом, если пользователь John имеет лицензию P1 и в Div А затем Переменная P1A должна увеличиваться на 1.

$Users = get-msoluser -MaxResults 3000 

Foreach ($user in $users) 
{ 
    if($user.licenses.AccountSkuID -eq $P1) 
    { 
     ForEach($Div in $DivList) 
     { 
      if($user.Department -like $Div) 
      { 
       Set-Variable -Name "P1$Div" -Value ++ 
       $P1$Div ++ 
      } 
     } 

Выше у меня есть и команда переменной набора, и я попытался $ p1 $ Div ++. Я не могу понять, как сделать прирост переменной выше. Команда set-variable всегда устанавливает переменную так, как она является строковым значением, поэтому она будет устанавливать ее на «++», а не перемещать ее с 0 на 1. Любая помощь будет оценена. Если это неясно, дайте мне знать, и я могу уточнить.

ответ

2

Я хотел бы использовать хэш-таблицу для подсчета, а не дискретными переменными:

$DIVCounts = @{} 
$DivList= "A","B","C" 
Foreach($Div in $DivList) 
{ 
    $DIVCounts["P1$div"] = 0 
    $DIVCounts["E1$div"] = 0 
    $DIVCounts["E3$div"] = 0 
} 

$Users = get-msoluser -MaxResults 3000 

Foreach ($user in $users) 
{ 
    if($user.licenses.AccountSkuID -eq $P1) 
    { 
     ForEach($Div in $DivList) 
     { 
      if($user.Department -like $Div) 
      { 
       $DIVCountss["P1$Div"]++ 
      } 
     } 
1

@mjolinor имеет лучший подход, так что вы должны использовать, но если вы хотите знать, почему это не работает, это потому, что ++ является оператором, и вы передаете его в командлет в качестве значения.

Вы бы на самом деле нужно сделать это так с вашим подходом:

$Users = get-msoluser -MaxResults 3000 

Foreach ($user in $users) 
{ 
    if($user.licenses.AccountSkuID -eq $P1) 
    { 
     ForEach($Div in $DivList) 
     { 
      if($user.Department -like $Div) 
      { 
       #$newVal = (Get-Variable -Name "P1$Div").Value + 1 
       #Set-Variable -Name "P1$Div" -Value $newVal 
       ++(Get-Variable -Name "P1$Div").Value 
       $P1$Div ++ 
      } 
     } 
    } 
} 

Отредактировано благодаря комментарий PetSerAl в.

+1

Вы можете '++ (Get-Variable -Name" P1 $ Div "). Value'. 'Value' - свойство чтения/записи. – PetSerAl

+0

@PetSerAl отличная точка; изм. – briantist

Смежные вопросы