Calling dynamic variable in PowerShell

北城余情 提交于 2019-11-27 16:12:41

First of all, your New-Variable invocation doesn't do what you think it does, as you'd pipe the output of New-Variable to Where-Object instead of using the value of $Transactions | Where ... as value for the variable. You need parentheses for that to work:

New-Variable -Name "Transactions_$Year" -Value ($Transactions | Where {$_.Date -like "*.$Year" })

If you absolutely have to use this approach, then you can get the variables again via Get-Variable:

Get-Variable Transactions_$Year | % Value

However, multiple variables with magic names is a rather poor way of solving this. You probably rather want a map:

$TransactionsPerYear = @{}
$Years | ForEach-Object {
  $TransactionsPerYear[$_] = $Transactions | Where Date -like "*.$_"
}

And you can get all transactions for 2015 with $TransactionsPerYear[2015].

Another way is Group-Object which doesn't even require a list of possible years to begin with, but groups a number of objects by some property or expression result:

$TransactionsPerYear = $Transactions | Group-Object { [int]($_.Date -replace '.*\.') }

(This is a guess on how it could work. It seems like your date string contains something up to a period, after which there is the year and nothing else, so perhaps something like dd.MM.yyyy date format.

You want to use Invoke-Expression cmdlet. You need to create dynamic string expression of commands that would initialize variable with the value. Here's how you do it:

$Years = 2015, 2016, 2017, 2018
$Years | ForEach-Object { 
    $Year = $_
    Invoke-Expression ('$Year' + $Year + ' = "Year is ' + $Year + '"')
 }

Here's the output:

Get-Variable Year*

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
Year                           2018                                                                                                                                                                                                                              
Year2015                       Year is 2015                                                                                                                                                                                                                      
Year2016                       Year is 2016                                                                                                                                                                                                                      
Year2017                       Year is 2017                                                                                                                                                                                                                      
Year2018                       Year is 2018                                                                                                                                                                                                                      
Years                          {2015, 2016, 2017, 2018}         
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!