Может ли PowerShell выбрать случайные буквы на основе заданного количества и динамически назначить каждую уникальную переменную? - PullRequest
0 голосов
/ 25 октября 2018

Как я могу использовать 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 (и так далее в Arn, если $ Count = n)

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Прежде всего, я согласен с 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                           {}
0 голосов
/ 26 октября 2018

Если вам действительно нужны разные переменные ($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 - имя переменнойдля создания - вычисляется динамически через блок сценариев .
В этом так называемом delay-bind использовании блока сценариев он запускается впеременная область видимости child , поэтому необходимо использовать экземпляр [ref] для ссылки на порядковый номер $iref в области действия вызывающего абонента.
В отличие от этого, блоки сценариев передаются в ForEach-Objectи Where-Object командлеты запускаются непосредственно в области вызова .
Это удивительное несоответствие обсуждается в этой проблеме GitHub .

0 голосов
/ 25 октября 2018

попробуй Нечто подобное

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...