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 をループして、各パスを配列に追加する必要があります。これがその方法ですが、WinPE の動作が異なるため、パスごとに新しい動的変数を作成することを考えています。

たとえば。

最初に $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 に答える