修改多个哈希表

时间:2017-09-01 11:08:07

标签: powershell

我想创建一个脚本来创建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

1 个答案:

答案 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'
}