使用Where-Object后使用Get-Random创建一个空值表达式

时间:2018-03-01 04:53:40

标签: arrays powershell random

我正在尝试创建一个10个字符的密码,其中包含数字,字母(大写和小写)以及符号的混合。

以下是我在函数中使用的脚本:

$ascii[26]

}

如果我删除以下部分:

  

| Where-Object {$ _ -notin“'”,'`','|','_',“;”,'“',','}

密码的创建工作正常,尽管包括我不想包含的符号。

使用Where-Object函数会使Get-Random函数仅使用数组中的前5个字符,因此我不会获得任何案例类型,数字或任何其他符号的字母。 / p>

我发现如果我使用[int[]][char[]](是数组中的第25个字符),我会得到一个空值,但我认为这会允许使用任何符合此字符的字符,或者没有根本不是第5个。第25个角色恰好是一个; (ascii值59)。我尝试将符号添加到Where-Object排除项中,并将其从数组中删除,但第25个字符仍显示为空值。

我对每个字符的ascii值$ascii.Count执行了反向查找;符号会出现,它返回值58和60,让我相信这是冒犯的值59,但此时的符号应该被排除在外。

在'where-object'排除列表中添加字符应该是从数组中删除它们,但是看起来如果正在运行{{1}}显示49个字符,无论我是否添加或删除字符到Where-对象排除列表。

我在网上寻找信息似乎找不到任何信息,虽然它可能是我正在使用的搜索字词,因为这是一个复杂的案例,并没有多少报道。

感谢任何帮助。

6 个答案:

答案 0 :(得分:1)

短版(对我来说最好的方法):

$possible=36..38 + 40..43 + 45..58 + 60..94 + 97..123 + 125..126 + 33
(get-random -count 10 -input $possible | % {[char]$_}) -join ''

答案 1 :(得分:1)

我没有写这个,我不记得我在哪里得到它,但我已经将其构建到任何脚本中以创建随机安全的Windows密码,您可以指定参数{{1}返回的密码的长度(我已将它设置为10)。

[int]$PasswordLength

EDIT :::

https://gallery.technet.microsoft.com/scriptcenter/Generate-a-random-and-5c879ed5

可在此处找到该脚本。

答案 2 :(得分:0)

尝试这样的事情:

Function random-password ($length = 10)
{
  $possible=36..38 + 40..43 + 45..58 + 60..94 + 97..123 + 125..126  + 33

  $password = get-random -count $length -input $possible |
            % -begin { $aa = $null } -process {$aa += [char]$_} -end {$aa}

  return $password
}

random-password

答案 3 :(得分:0)

使用以下脚本似乎完全符合我的要求。

我在此行的+ =之后删除了逗号(,):

$ascii = $NULL;For ($a = 33;$a –le 126;$a++) {$ascii +=, ([char][byte]$a | Where-Object {$_ -notin "'",'`','|','_',";",'"',','})}

我在将数组添加到以下内容之前创建了一个空数组: $ascii = @()

完整的代码块如下:

Function Get-TempPassword {

    $TempPassword = $null

    $ascii = @()
    For ($a = 33;$a –le 126; $a++) { $ascii += ([char][byte]$a | Where-Object { $_ -notin "'",'`','|','_',";",'"',',' }) }

    Do {$TempPassword += $ascii | Get-Random; $loop++}

    Until ($loop -eq 11)

    return $TempPassword
}

答案 4 :(得分:0)

我已经纠正了我的其他命题,但我提出了另一种方法:)

Function random-password2 ($length = 10)
{

$Assembly = Add-Type -AssemblyName System.Web
$password = [System.Web.Security.Membership]::GeneratePassword(50, 2)

$possible=36..38 + 40..43 + 45..58 + 60..94 + 97..123 + 125..126 + 33    
$newchar=[char](get-random -count 1 -input $possible)
$password=$password -replace "[`'|_;,]",  $newchar
$password.Substring(0, $length)


}

random-password2

答案 5 :(得分:0)

递归方法:

package.json