Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?相关的知识,希望对你有一定的参考价值。
如何使用Powershell根据给定的计数选择一个随机字母,并将每个字母动态分配给一个唯一的变量?
我有以下代码,但我不知道如何去做上述任何想法,好吗?
$Count =3
$a = Get-Random -InputObject 'a','b','c','d','e','f','g','h','i','j', 'k', 'l', 'm','n' -Count $Count
我希望每个字母的输出存储在3个不同的变量中,如Ar1,Ar2和Ar3(如果$ Count = n,依此类推Arn)
如果你真的需要不同的变量($Ar1
,$Ar2
,... $Ar<n>
),这里是最简洁的解决方案:
$iref = [ref] 1
$Count = 3
Get-Random -InputObject ([char[]] (([char] 'a')..([char] 'n'))) -Count $Count |
New-Variable -Force -Name { 'Ar' + $iref.Value++ }
注意:([char[]] (([char] 'a')..([char] 'n')))
是缩写
'a','b','c','d','e','f','g','h','i','j', 'k', 'l', 'm','n'
。
在PowerShell Core中,您可以简单地使用('a'..'n')
。
还要注意-Name
参数(要创建的变量的名称)是如何通过脚本块动态计算的。
在这个所谓的脚本块的延迟绑定用法中,它在子变量范围内运行,因此需要使用[ref]
实例来引用调用者范围中的序列号$iref
。
相比之下,传递给ForEach-Object
和Where-Object
cmdlet的脚本块直接在调用者的作用域中运行。
这种令人惊讶的差异在this GitHub issue中讨论过。
尝试像这样的东西
$Count =3
$a = Get-Random -InputObject 'a','b','c','d','e','f','g','h','i','j', 'k', 'l', 'm','n' -Count $Count
for ($i = 0; $i -lt $a.Count; $i++)
{
#Traitment with element in $i posoition
$Current=$a[$i]
#use $Current for your traitment
$Current
}
首先,我同意Lee_Dailey认为创建这样的变量并不是一个好主意。
但是,可以这样做:
$Count = 3
$a = Get-Random -InputObject 'a','b','c','d','e','f','g','h','i','j', 'k', 'l', 'm','n' -Count $Count
for ($i = 0; $i -lt $a.Count; $i++) {
$varname = "Ar$($i + 1)"
Remove-Variable $varname -ErrorAction SilentlyContinue
New-Variable -Name $varname -Value $a[$i]
}
请注意,要使其正常工作,必须首先删除具有该名称的可能已存在的变量,这可能会导致其余代码出现无法预料的问题。
要查看创建的内容,可以使用Get-Variable 'Ar*'
,它将显示如下内容:
Name Value
---- -----
Ar1 m
Ar2 d
Ar3 j
args {}
以上是关于Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?的主要内容,如果未能解决你的问题,请参考以下文章