2016-04-14 8 views
1
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing") 

$form = New-Object System.Windows.Forms.Form 
$form.Size = New-Object System.Drawing.Size(900,600) 

$ColName = @{Expression={$_.CSNAME};Label="SERVER NAME"}, 
      @{Expression={$_.Caption};Label="OS NAME"; width =25}, 
      @{Expression={$_.OSArchitecture};Label="OS TYPE"} 
$out = Get-WmiObject Win32_OperatingSystem -ComputerName "suman-pc" | 
     Format-Table -HideTableHeaders $ColName 

list = New-Object System.Collections.ArrayList 
$list.Insert($out) 

$dataGridView = New-Object System.Windows.Forms.DataGridView -Property @{ 
    Size=New-Object System.Drawing.Size(800,400) 
    ColumnHeadersVisible = $true 
    DataSource = $list 
} 

$form.Controls.Add($dataGridView) 
$form.ShowDialog() 

上記のコードは以下のエラーを生成しています。私の目的は、複数のシステムのOS名を収集し、それをデータグリッド形式で表示することです。このコードで何が問題なのか教えてください。

New-List : Cannot bind parameter 'MarkerOffset'. Cannot convert value 
"System.Collections.ArrayList" to type "System.Double". Error: "Input string 
was not in a correct format." 
At C:\Users\Suman\AppData\Local\Temp\4abe9ca5-3580-4c58-918b-9f1f721c1f32.ps1:10 char:19 
+ list = New-Object System.Collections.ArrayList 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [New-List], ParameterBindingException 
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,AutoGenerateCmdlets669798327.NewListCommand 

Cannot find an overload for "Insert" and the argument count: "1". 
At :\Users\Suman\AppData\Local\Temp\4abe9ca5-3580-4c58-918b-9f1f721c1f32.ps1:11 char:1 
+ $list.Insert($out) 
+ ~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodException 
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest
+0

ない正確に答え、あなたは 'Out-GridView'を考えましたか? – Joey

+3

変数名の前に '$'がありません。 – PetSerAl

+1

list = New-Object System.Collections.ArrayListは$ list = ...でなければなりません。また、insertはインデックスを指定する必要があります。 –

答えて

1

ここにはいくつかの理由があります。

最初にフォーマット表は表示出力としてのみ使用されますので、使用しないでください。

第二に、あなたは$ list.Add()の代わりに$ list.Insert()のを使用する必要があり、間違った方法を使用して

ここでは固定コードです:

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing") 

$form = New-Object System.Windows.Forms.Form 
$form.Size = New-Object System.Drawing.Size(900,600) 

$ColName = @{Expression={$_.CSNAME};Label="SERVER NAME"}, 
      @{Expression={$_.Caption};Label="OS NAME";}, 
      @{Expression={$_.OSArchitecture};Label="OS TYPE"} 
$out = Get-WmiObject Win32_OperatingSystem -ComputerName "suman-pc" | Select-Object $ColName 

$list = New-Object System.Collections.ArrayList 
[void]$list.Add($out) 

$dataGridView = New-Object System.Windows.Forms.DataGridView -Property @{ 
    Size=New-Object System.Drawing.Size(800,400) 
    ColumnHeadersVisible = $true 
    DataSource = $list 
} 

$form.Controls.Add($dataGridView) 
$form.ShowDialog() 
+0

多くありがとうございます。 –

関連する問題