DataViewGrid 未显示预期数据

问题描述 投票:0回答:0

我的问题是我不知道问题是什么。显示变量

$VMName
$Output
的内容有问题,如果您有任何解决方案,请告诉我。不起作用的部分用感叹号和主题标签圈起来。除此之外,我已经将脚本的最大部分复制到这里,以防有人想要测试它。

# Create the main window
$form = New-Object System.Windows.Forms.Form
$form.Text = "Serverkonfigurations-Export"
$form.Width = 555
$form.Height = 500

# static size
$form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
$form.MaximizeBox = $false

$DataGridView = New-Object Windows.Forms.DataGridView
$DataGridView.Location = New-Object Drawing.Point(25, 50)
$DataGridView.Size = New-Object Drawing.Size(490, 350)
$DataGridView.ReadOnly = $true
$DataGridView.AllowUserToAddRows = $false
$DataGridView.AutoGenerateColumns = $false
$Form.Controls.Add($DataGridView)

# Create columns
$Column1 = New-Object Windows.Forms.DataGridViewTextBoxColumn
$Column1.Name = "VM Name"
$Column1.HeaderText = "VM Name"
$Column1.Width = 272
$DataGridView.Columns.Add($Column1)

$Column2 = New-Object Windows.Forms.DataGridViewTextBoxColumn
$Column2.Name = "CPU/RAM"
$Column2.HeaderText = "CPU/RAM"
$Column2.Width = 175
$DataGridView.Columns.Add($Column2)

# Get virtual machines
$VMs = Get-SCVirtualMachine | Where-Object {$_.Name -like "*xenapp1*"}

#Start foreach-Schleife
foreach($VM in $VMs){

    $ProcessorCount = $VM.CPUCount
    $Memory = $VM.Memory
    $MemoryConfiguration = $VM.DynamicMemoryEnabled
    $MemorySize = $Memory / "1024"

    # Format for Output
    $OutputFormat = "{0}c/{1}G{2}"
    if($MemoryConfiguration -eq $true){

        $MemoryUnit = "d"
    }
    else{

        $MemoryUnit = "s"
    }

    # Result Output
    $VMName = $VM.Name 
    $Output = $OutputFormat -f $ProcessorCount, $MemorySize, $MemoryUnit

    $Output1 = [PSCustomObject]@{
        VMName = $VMName
        Config = $Output
    }  

}

######################################################################
! Create Data as datatable                                           !
! $dataTable = New-Object System.Data.DataTable                      !
! $dataTable.Columns.Add("VM Name", [string]::typeid) | Out-Null     !
! $dataTable.Columns.Add("CPU/RAM", [string]::typeid) | Out-Null     !
! $dataRow = $dataTable.NewRow()                                     !
! $dataRow["VM Name"] = $VMName                                      !
! $dataRow["CPU/RAM"] = $Output                                      !
! $dataTable.Rows.Add($dataRow)                                      !
! $DataGridView.DataSource = $dataTable                              !
######################################################################

# Button creation
$button3 = New-Object System.Windows.Forms.Button
$button3.Text = "Export to CSV"
$button3.Location = New-Object System.Drawing.Point(330, 405)
$button3.Size = New-Object System.Drawing.Size(100,25)
$form.Controls.Add($button3)

$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(440, 405)
$cancelButton.Size = New-Object System.Drawing.Size(75,25)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.Controls.Add($cancelButton)

# create copy button
$CopyButton = New-Object Windows.Forms.Button
$CopyButton.Location = New-Object Drawing.Point(195, 405)
$CopyButton.Size = New-Object Drawing.Size(125, 25)
$CopyButton.Text = "Copy marked cells"
$CopyButton.Add_Click({
    # Check if a cell is marked
    if ($DataGridView.SelectedCells.Count -gt 0) {
        # content of marked cells copy to clipboard
        $ClipboardData = ""
        foreach ($cell in $DataGridView.SelectedCells) {
            $ClipboardData += $cell.Value + "`t" # Tab als Trennzeichen verwenden
        }
        $ClipboardData | Set-Clipboard
    }
    else {
        [System.Windows.MessageBox]::Show("Value cannot be null","Copy to Clipboard failed",0)
    }
})
$form.Controls.Add($CopyButton)

$text = "Dieses Script ist dazu da, die Serverkonfigurationen von den einzelnen Xenapp-Server auszulesen."
# Label for introduction
$label = New-Object System.Windows.Forms.Label
$label.Text = $text
$label.AutoSize = $true
$label.Location = New-Object System.Drawing.Point(25, 20)
$form.Controls.Add($label)

这些是我执行脚本时出现的错误。

Exception calling "Add" with "2" argument(s): "'dataType' argument cannot be null.
Parameter name: dataType"
At C:\Scripts\000_In_Progress\nois\VMconfig_auslesen.ps1:72 char:1
+ $dataTable.Columns.Add("VM Name", [string]::typeid) | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException
 
Exception calling "Add" with "2" argument(s): "'dataType' argument cannot be null.
Parameter name: dataType"
At C:\Scripts\000_In_Progress\nois\VMconfig_auslesen.ps1:73 char:1
+ $dataTable.Columns.Add("CPU/RAM", [string]::typeid) | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException
 
Column 'VM Name' does not belong to table .
At C:\Scripts\000_In_Progress\nois\VMconfig_auslesen.ps1:75 char:1
+ $dataRow["VM Name"] = $VMName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException
 
Column 'CPU/RAM' does not belong to table .
At C:\Scripts\000_In_Progress\nois\VMconfig_auslesen.ps1:76 char:1
+ $dataRow["CPU/RAM"] = $Output
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException
powershell winforms datatable datagridview
© www.soinside.com 2019 - 2024. All rights reserved.