Привет. Во-первых, у меня есть 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 и т. д., тогда я могу вызвать фактическую переменную для информации, а не для индекса массива? это может сработать?
$a += $Results
на[Array]$a = $a + $Results
и посмотрите, будет ли это лучше. Похоже, он не настраивает $a как массив, поэтому он не повторяет новые записи, а просто сбрасывает их. - person TheMadTechnician   schedule 14.02.2014