Powershell根据给定的计数选择一个随机字母,并动态地将每个字母分配给一个唯一的变量?

问题描述 投票:1回答:3

如何使用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)

powershell
3个回答
1
投票

如果你真的需要不同的变量($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-ObjectWhere-Object cmdlet的脚本块直接在调用者的作用域中运行。 这种令人惊讶的差异在this GitHub issue中讨论过。


0
投票

尝试像这样的东西

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

0
投票

首先,我同意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                           {}
© www.soinside.com 2019 - 2024. All rights reserved.