Массив Powershell не работает в WinPE, но нормально работает в Windows 7

Привет. Во-первых, у меня есть WinPE 4 и Powershell версии 4, в моей среде отлично работают другие сценарии PowerShell.

Проблема заключается в отображении информации о массиве. В Windows 7 с PS версии 4 это прекрасно работает...

У меня есть функция, округляющая размер, который нам не нужен в этом примере.

$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 ГБ

В WinPE $Drive1,2,3,4,5,6 пусты...

Однако $Result (который я добавляю в свой массив) не является. Как только я беру этот $Result и добавляю его в массив $a в WinPE, как будто он его очищает?

Мне нужно выполнить цикл для каждого и добавить каждый проход в массив, и вот как вы это делаете, но поскольку WinPE действует по-другому, я смотрю на создание совершенно новой динамической переменной с каждым проходом.

Например.

Возьмите вызов первого прохода $Result1, затем $Result2 и $result3 и т.д.

Может быть, если я использую реальную переменную (например, $Result, которая отображается в WinPE), я могу обойти странное поведение 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])

У меня ничего не получается в винпе. Если я сделаю это...

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

он выводит информацию, однако я не могу использовать только $a, так как это только последний проход в цикле..

В виндовс 7 все нормально..

Как я могу создать новую переменную на каждом проходе без массива?

Итак, $Result1, $Result2 и т. д., тогда я могу вызвать фактическую переменную для информации, а не для индекса массива? это может сработать?


person LDStewart    schedule 13.02.2014    source источник
comment
Попробуйте изменить $a += $Results на [Array]$a = $a + $Results и посмотрите, будет ли это лучше. Похоже, он не настраивает $a как массив, поэтому он не повторяет новые записи, а просто сбрасывает их.   -  person TheMadTechnician    schedule 14.02.2014
comment
Привет, отлично сработало, спасибо!   -  person LDStewart    schedule 14.02.2014


Ответы (1)


Добавление моего предложения в качестве ответа, чтобы вопрос можно было решить. Попробуйте изменить $a += $Results на [Array]$a = $a + $Results и посмотрите, будет ли это лучше. Похоже, он не настраивает $a как массив, поэтому он не повторяет новые записи, а просто сбрасывает их.

person TheMadTechnician    schedule 14.02.2014
comment
У меня есть еще одна странная проблема с winpe — код работает в win7, а не в winpe, и думаю, у вас может быть идея, почему? - person LDStewart; 29.12.2016