【问题标题】:Understanding key's and values of a hashtable了解哈希表的键和值
【发布时间】:2016-09-22 05:22:37
【问题描述】:

我目前正在阅读一本书,遇到了一个关于哈希表的示例,我们有一个 CSV 文件,我们想通过管道传输到 New-ADUser,该 CSV 文件如下所示:

属性名称与New-ADUser 接受的名称不匹配,因此Import-CSV .\newusers.csv | New-ADUser 将不起作用,但我们可以创建一个哈希表来更改属性名称以匹配New-ADUser 接受的输入,即本书提供的解决方案是这样的:

C:\> import-csv .\newusers.csv |
>> select-object -property *,
>> @{name='samAccountName';expression={$_.login}},
>> @{label='Name';expression={$_.login}},
>> @{n='Department';e={$_.Dept}}

我知道有一个键和一个与之关联的值,总共有 3 个键,我对这个特定解决方案的问题是:

  • 为什么键必须是名称、N、标签或 L?我不能输入自定义键名吗?使用 Name、N、Label 或 L 有什么意义?

  • 键的samAccountNameName 的值都是$_.Login ...$_.Login 来自哪里?在这种情况下是什么意思?

【问题讨论】:

    标签: powershell csv key hashtable


    【解决方案1】:

    Key 表示您必须使用提到的namelabel 标识符定义的属性的属性名称。属性的名称将是您分配给键的值。

    $_.Login 来自您的 CSV。您必须附加 $_.,因为您正在访问表达式中的属性。

    【讨论】:

    • 这样就搞定了,但我还是不明白为什么我必须使用NameLabel 来指定属性名称?我不能改用custom01custom02,无论如何我仍然会有相同的属性名称和值?属性名称仍然可以通过 New-ADUser ByPropertyName 传递,所以我看不出不使用 namelabel 会如何改变它?
    • PowerShell 如何知道custom01 是属性名称?您必须指定属性名称 e。 G。 custom01 使用标识符 namelabel
    • 抱歉我的措辞不好,我的问题是:标识符必须是name 还是label?例如:@{name='samAccountName';expression={$_.login}}@{custom='samAccountName';expression={$_.login}} 指定属性名称samAccountName 和值$_.login,但标识符已更改,使用的标识符有什么变化吗?如果没有,名称或标签标识符之间是否有区别,或者标识符只是用于保持事物井井有条?
    • 是的,标识符必须是名称或标签,但它仅使用该 powershell 实际标识符是什么。因此 name = samAccountName 使用您在表达式中指定的值创建了一个名为 samAccountName 的新属性。名称和标签没有区别。
    • 该功能被称为calculated properties
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 2014-09-16
    • 2015-11-12
    • 2020-05-04
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多