0

嗨首先我有 WinPE 4 和 Powershell 版本 4 在我的环境中运行其他 powershell 脚本。

问题在于显示阵列信息。在运行 PS 版本 4 的 Windows 7 上,这很好用...

我有一个函数四舍五入我们在这个例子中不需要的大小。

$a = @()
$diskdrive = gwmi win32_diskdrive
foreach($drive in $diskdrive){

$InterFaceType = "$($Drive.InterfaceType)"
If(!($InterFaceType -eq "USB")){
$Size = "$($drive.size)"
$DriveModel = "`nDrive: $($drive.deviceid.substring(4))  Model: $($drive.model)" 
$Size = Get-OptimalSize $Size
$Result = $DriveModel + "     " + $Size
$a += $Result
}
}

$a = $a | Sort-Object

$Drive1 = $a[0] 
$Drive2 = $a[1]
$Drive3 = $a[2]
$Drive4 = $a[3]
$Drive5 = $a[4]
$Drive6 = $a[5]

$Drive1 = $Drive1.trim()
$Drive2 = $Drive2.trim()
$Drive3 = $Drive3.trim()
$Drive4 = $Drive4.trim()
$Drive5 = $Drive5.trim()
$Drive6 = $Drive6.trim()

在 Windows 7 中 $Drive1,2,3,4,5,6 将显示以下有关检测到的驱动器的信息。

驱动器:PHYSICALDRIVE0 型号:ST3500418AS 465.76 GB

在 WinPE 中 $Drive1,2,3,4,5,6 为空白...

但是 $Result (我添加到我的数组中)不是。一旦我把那个 $Result 添加到 WinPE 中的 $a 数组中,它就像它清除它一样?

我需要遍历 for each 并将每个 pass 添加到一个数组中,这就是你的做法,但由于 WinPE 的行为不同,我正在考虑为每个 pass 创建一个全新的动态变量。

例如。

先调用 $Result1,然后调用 $Result2 和 $result3 等。

也许如果我使用一个实际的变量(比如在 WinPE 中显示的 $Result),我可以解决 WinPE 的奇怪行为?

任何帮助表示赞赏。

只是为了添加行为让人想起字符串没有被修剪,因为在 Windows 7 上编译代码时它一直在做同样的事情,直到我将修剪添加到 $drive 变量。但是我已经修剪了变量,在 WinPE 中它仍然不会在调用时显示。我需要进一步修剪吗?只是一个想法

例如....我正在这样做。

    If($a[0]){
$Radio1.BackColor = [System.Drawing.Color]::’Transparent’
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 500
$System_Drawing_Size.Height = 15    
$Radio1.Size = $System_Drawing_Size
$Radio1.TabIndex = 5
$Radio1.Text = $Drive1
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 27
$System_Drawing_Point.Y = 260
$Radio1.Location = $System_Drawing_Point
$Radio1.DataBindings.DefaultDataSourceUpdateMode = 0
$Radio1.Name = "Radio1"
$form1.Controls.Add($Radio1)

}

使用 $a 而不是数组会发生这种情况。

如果我这样做

$msg = [System.Windows.Forms.MessageBox]
$msg::Show($a[0])

我在winpe中一无所获。如果我这样做...

$msg = [System.Windows.Forms.MessageBox]
$msg::Show($a)

它输出信息,但是我不能只使用 $a ,因为这只是循环中的最后一遍..

在 Windows 7 中这一切都很好。

如何在没有数组的情况下在每次传递时创建一个新变量?

所以 $Result1, $Result2 等然后我可以调用信息的实际变量而不是数组索引?那可能有用吗?

4

1 回答 1

0

将我的建议添加为答案,以便可以解决问题。尝试更改$a += $Results[Array]$a = $a + $Results,看看是否表现更好。听起来它没有将 $a 设置为数组,所以它没有迭代新记录,它只是重置它。

于 2014-02-14T00:01:55.420 回答