使用名为length的键的Powershell哈希表

时间:2019-01-24 21:40:31

标签: powershell key hashtable

当其中一个键名为“ length”时,解析具有键值对的文件时遇到问题。将内容添加到ConvertFrom-StringData会创建一个名为“ length”的键的哈希表,但是当我尝试访问它时,我会得到表的长度。事实证明,这是因为ConvertFrom-StringData返回一个哈希表数组,而Length是该数组的长度(在这种情况下为6)。

有人知道如何解决这个问题吗?对于常规哈希表,您可以创建一个名为length的键,并可以很好地访问它($ tmp [1] .length可以提供1000um)。但是,我通常不知道文件中“长度”字段的索引。

> $tmp = Get-Content "Sample Settings.txt"

> $tmp
device=Hall bar
length=1000um
width=500um
thickness=8nm
system=PPMS
field=Perpendicular

> $tmp = $tmp | ConvertFrom-StringData

> $tmp

Name                           Value                                                                                                                                                                                            
----                           -----                                                                                                                                                                                            
device                         Hall bar                                                                                                                                                                                         
length                         1000um                                                                                                                                                                                           
width                          500um                                                                                                                                                                                            
thickness                      8nm                                                                                                                                                                                              
system                         PPMS                                                                                                                                                                                             
field                          Perpendicular                                                                                                                                                                                    

> $tmp.length
6

> $tmp[1].length
1000um

> $tmp.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                             
-------- -------- ----                                     --------                                                                                                                                                             
True     True     Object[]                                 System.Array

> $tmp[0].GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                             
-------- -------- ----                                     --------                                                                                                                                                             
True     True     Hashtable                                System.Object  

3 个答案:

答案 0 :(得分:0)

使用SampleManager获取索引,然后使用它获取值:

IndexOf()

答案 1 :(得分:0)

-replace与RegEx一起使用,在length前面加上字符串(此处为my):

> $tmp = $tmp -replace '^(?=length)','my' | convertfrom-stringdata
> $tmp
Name                           Value
----                           -----
device                         Hall bar
mylength                       1000um
width                          500um
thickness                      8nm
system                         PPMS
field                          Perpendicular

> $tmp.mylength
1000um

(?=..)zero length look ahead assertion

答案 2 :(得分:0)

要获取常规哈希表,请使用-Raw开关,如下所示:

$tmp = Get-Content "Sample Settings.txt" -Raw | ConvertFrom-StringData

然后:

$tmp
<#
Name                           Value                                           
----                           -----                                           
device                         Hall bar                                        
thickness                      8nm                                             
field                          Perpendicular                                   
width                          500um                                           
system                         PPMS                                            
length                         1000um                                          
<##>

$tmp.gettype().Name
# Hashtable

$tmp.Count
# 6

$tmp.length
# 1000um