【问题标题】:Modify Multi Hashtables修改多哈希表
【发布时间】:2017-09-01 11:08:06
【问题描述】:

我想创建一个脚本来创建 VDI。基本上它已经准备好了,但现在我想修改它以与 gridviews 一起使用,使其更可用。

我的目标是,你可能会得到这样的代码:

$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"
}

现在,当您选择没有指定用户的条目时,您应该能够将名称添加到哈希表中。

当我尝试这个时:

$table.Add("123", "VM0004", "Pete")

我收到以下错误(德语):

Für "Add" und die folgende Argumenteanzahl kann keine Überladung gefunden 韦尔登:“3”。 在 Zeile:8 Zeichen:1 + $table.Add("123", "VM0004", "Pete") + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodCountCouldNotFindBest

【问题讨论】:

  • 你的问题是?
  • 我想将用户帐户添加到 tue 哈希表中。当您选择一个条目时,我想修改一个值。我无法在 hastable 中添加或修改值
  • 不足为奇,因为您的代码甚至没有尝试。你试图让它发挥作用,你的尝试是如何失败的?实际结果如何?你有错误吗?
  • 基本上很简单。我想修改 Hashtable 的内容。但我无法在顶部的 hastable 中修改或添加内容。谁能告诉我如何执行这个“基本”任务的示例代码? :)
  • 什么。有。你。试过了吗?

标签: powershell


【解决方案1】:

您的$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'
}

【讨论】:

  • 啊 :D 现在可以了。感谢您的帮助和解释。这是了解工作流程的最重要的事情。谢谢!
猜你喜欢
  • 2021-01-31
  • 2013-07-18
  • 1970-01-01
  • 2016-04-17
  • 2013-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2013-06-24
相关资源
最近更新 更多