PowerShell抑制输出

PowerShell抑制输出,powershell,Powershell,我已经检查并尝试了一些关于StackOverflow的建议,但没有一个有效。我列举了一个我正在努力完成的例子 [System.Random] $rand = New-Object System.Random $randomNumbers = New-Object int[] 10; [int[]] $randomNumbers; for($i = 0; $i -lt $randomNumbers.Length; $i++) { ($randomNumbers[$i] = $rand.Ne

我已经检查并尝试了一些关于StackOverflow的建议,但没有一个有效。我列举了一个我正在努力完成的例子

[System.Random] $rand = New-Object System.Random
$randomNumbers = New-Object int[] 10;
[int[]] $randomNumbers;
for($i = 0; $i -lt $randomNumbers.Length; $i++)
{
    ($randomNumbers[$i] = $rand.Next(256)) 2>&1 | Out-Null;
}
我已经试过了

> $Null
|Out-Null
2>&1

但它们似乎都没有抑制产出。显示连续10个零。每个作业一个。如何抑制该输出?

删除
int[]]$randomNumbers。打印的不是作业,而是空数组。

替换代码的其他解决方案;)

补充:

  • [int[]$randomNumbers
    看起来像是一个类型绑定的PowerShell变量声明,但是,由于没有赋值,它只是一个强制转换:先前存在的
    $randomNumbers
    值的10个元素数组只需强制转换为
    [int[]
    (在这种情况下为无操作),然后输出-在这种情况下,产生10行,每行上都有
    0

    • 新对象int[]10
      语句(低效)等价的真正类型绑定赋值是
      [int[]]$randomNumbers=@(0)*10

      请注意,
      =
      的存在使该语句成为隐式创建变量的赋值
    • PowerShell没有传统意义上的变量声明,当您分配给它们时,它会根据需要创建变量。
      但是,您可以使用
      New Variable
      cmdlet显式创建变量,这允许您控制其他方面,例如变量的范围
  • 默认情况下,PowerShell中的变量分配不输出任何内容,因此无需抑制任何输出(使用
    | Out Null
    $Null
    ,…)

  • 也就是说,您可以通过将赋值包含在
    (…)
    中,强制变量赋值输出赋值

    • $v='foo'#无输出
    • ($v='foo')#括在()->'foo'中是输出
正如您所发现的,在
($randomNumbers[$i]=$rand.Next(256))2>&1中主动抑制输出,输出为Null
是不必要的,因为只要省略括号就可以使语句安静:
$randomNumbers[$i]=$rand.Next(256)


最后,您可以使用
Get Random
cmdlet简化代码:

[int[]] $randomNumbers = 1..10 | % { Get-Random -Maximum 256 } 

这条管道完成了代码所做的一切(不确定性能,但可能并不重要)。

Doh!很抱歉犯了愚蠢的错误,但谢谢你的回答。只要时间允许,我就接受。我讨厌这些愚蠢的错误,但我真的很欣赏这个快速的回答,我已经用头敲击键盘30分钟了。实际上我甚至不需要抑制输出$randomNumbers[$i]=$rand.Next(256)可以正常工作。我以为这就是输出所有零的原因++;当你发布这篇文章时,我正忙着用基本相同的想法来构思我的答案。请注意,
-Minimum
应该是
0
(因此可以省略),以匹配“Get Random-maximum 256”的行为,因为0是Minimum的默认值;)我已经修改了我的代码,并不真正担心性能。当我了解更多有关PowerShell的信息时,我更喜欢四处修补。感谢您对变量声明的描述。我一直在努力声明数组,这可能就是为什么我还有多余的一行不需要的原因。
[int[]] $randomNumbers = 1..10 | % { Get-Random -Maximum 256 }