【问题标题】:Adding data to Hash Table using Powershell 'Cannot find an overload for "Add" and the argument count"使用 Powershell 将数据添加到哈希表“找不到“添加”和参数计数的重载”
【发布时间】:2014-04-22 18:47:38
【问题描述】:

我正在自学 Powershell,但我正在努力掌握哈希表。我明白了这个概念,但应用它是另一回事。

我正在使用“Hey Scripting Guy”帖子作为参考,http://blogs.technet.com/b/heyscriptingguy/archive/2011/10/15/automatically-create-a-powershell-hash-table-10-15-11.aspx,即这里的这篇文章:

To create a hash table dynamically, follow these steps:
1.       Create an empty hash table.
2.       Store the empty hash table in a variable.
3.       Collect the data.
4.       Store the collected data in a variable.
5.       Use the foreach statement to walk through the collected data.
6.       Inside the loop call the add method to add the key value pairs to the hash table.

An example of this procedure is shown here:
$hash = $null
$hash = @{}
$proc = get-process | Sort-Object -Property name -Unique

foreach ($p in $proc)
{
 $hash.add($p.name,$p.id)
}

效果很好,但是当我尝试将其满足我的需求时,它会说:

Cannot find an overload for "Add" and the argument count: "1".
At line:15 char:10
+ $hash.add <<<< ($strGroup)
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

Google 没有发现任何相关信息,所以我求助于 Stack Overflow Powershell 用户,我在这里做错了什么?

import-module activedirectory
$strDate = Get-Date
$strGroupList = get-content "C:\Users\MYUSERNAME\Documents\Group Audit\audit.txt"
$strGroupDetails = Get-ADGroupMember -identity $strGroup 


$strGroupList #list groups found

$hash= $null #empty the hash table
$hash = @{} 


foreach ($strGroup in $strGroupList)
{
$hash.add($strGroup)
}

我所做的只是进入一个文本文件,获取 Active Directory 组的名称,返回它们(为了逐步执行代码),目的是获取每个项目中组的所有成员在我的列表(文本文件)中,按组放入单独的数组中。例如:

Group1     Time/Date
------     ---------------
member1
member2
member3
member4

Group Owner:__________

Group2     Time/Date
------     ----------------
member1
member2
member3
member4

Group Owner:__________

问题是我不知道自己做错了什么。我通读了帖子,按照他的方式做的很好,但是我的方式有问题。我确定我用手指指了一些东西,但我就是找不到!

感谢任何帮助,欢迎任何批评。

【问题讨论】:

    标签: powershell active-directory hashtable


    【解决方案1】:

    每个哈希表条目都由一个键和一个值组成。
    这里:

    $hash.add($p.name,$p.id)
    

    您正在向哈希表中添加一个新条目,其中的键是 $p.name 中的任何内容,值是 $p.id 中的任何内容。提供的 .add 方法有两个参数 - 一个用于键,一个用于值。

    这里:

    $hash.add($strGroup)
    

    您只提供了一个参数,而该方法不知道如何处理该参数 - 它需要键和值的参数,但没有足够的参数。

    编辑:

    我认为这可能更接近您想要完成的目标:

    import-module activedirectory
    $strDate = Get-Date
    $strGroupList = get-content "C:\Users\MYUSERNAME\Documents\Group Audit\audit.txt"
    
    
    $strGroupList #list groups found
    
    $hash= $null #empty the hash table
    $hash = @{} 
    
    
    foreach ($strGroup in $strGroupList)
    {
    $strGroupDetails = Get-ADGroupMember -identity $strGroup 
    $hash.add($strGroup,$strGroupDetails)
    }
    

    【讨论】:

    • 如果你真的想等待第二次添加值,你可以将它们初始设置为$null,例如:$hash.add($strGroup,$null)
    猜你喜欢
    • 2011-07-26
    • 2011-09-18
    • 2021-10-21
    • 2020-06-30
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2012-09-03
    • 2021-04-04
    相关资源
    最近更新 更多