我想创建一个脚本来创建VDI。基本上它已经准备就绪,但现在我想修改它以使用gridviews来使它更有用。
我的目标是,您可以获得类似以下代码的网格视图:
get_double()
现在,当您选择没有分配用户的条目时,您应该能够在哈希表中添加名称。
当我尝试这个时:
$id = 1
$table = @( @{'ID'=$id ++; 'VM Name'="VM0001"; 'Assigned User'=$null},
@{'ID'=$id ++; 'VM Name'="VM0002"; 'Assigned User'=$null},
@{'ID'=$id ++; 'VM Name'="VM0003"; 'Assigned User'=$null} )
$out = $null
$out = $table.ForEach({[PSCustomObject]$_}) |
Select ID, 'VM Name', 'Assigned User' |
Out-GridView -Title "VM Creator" -OutputMode Single -OutVariable selectedID
if ($selectedID -eq $null -or $out.Count -eq 0) {
Write-Host -BackgroundColor Black -ForegroundColor Red "Error: nothing is choosed"
}
if ($selectedID.'Assigned User' -eq $null) {
Write-Host -BackgroundColor Black -ForegroundColor Green "Debug: Input UserName for Desktop" $selectedID.'VM Name'
$newUser = Read-Host "Input UserName"
}
我收到以下错误(德语):
Für "Add" und die folgende Argumenteanzahl kann keine Überladung gefunden werden: "3". In Zeile:8 Zeichen:1 + $table.Add("123", "VM0004", "Pete") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodCountCouldNotFindBest
答案 0 :(得分:0)
您的$table
是一个哈希表数组,因此您需要附加另一个哈希表:
$table += @{'ID'="123"; 'VM Name'="VM0004"; 'Assigned User'="Pete"}
此处不能使用Add()
方法,因为您无法附加到固定大小的数组(+=
,因为它实际上并不附加到数组但会创建新数组增加大小,复制现有数组中的元素,将新值放入空闲槽中,然后将新数组分配给变量。
为了能够修改所选行的值,我建议立即使用一组自定义对象(无论如何你都要为gridview创建它们)。
$table = [PSCustomObject]@{'ID'=$id++; 'VM Name'="VM0001"; 'Assigned User'=$null},
[PSCustomObject]@{'ID'=$id++; 'VM Name'="VM0002"; 'Assigned User'=$null},
[PSCustomObject]@{'ID'=$id++; 'VM Name'="VM0003"; 'Assigned User'=$null}
使用它可以更新所选行的值,如下所示:
$selected = $table | Out-GridView -PassThru
$selected | ForEach-Object {
$_.'Assigned User' = 'Chris'
}