首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell哈希表问题

powershell哈希表问题
EN

Stack Overflow用户
提问于 2011-03-24 07:42:31
回答 3查看 720关注 0票数 3

我正在尝试读取一个配置文件,其中包含一些键值对,如下所示:

代码语言:javascript
复制
age = 7
server = \\server\
destination = \\nas\public\server\

下面是我用来读取文件的脚本:

代码语言:javascript
复制
gc "keyval.txt" | % -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } }
$h                    #THIS PRINTS THE KEYS and VALUES
$h.get_item("server") #THIS DOESN'T DO ANYTHING
$h.server             #THIS DOESNT DO ANYTHING AS WELL

我了解到powershell中的哈希表有一些奇怪之处,但无法在避免这些奇怪之处的过程中抓住机会。请帮我解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-24 08:35:03

如果您不想修改文件:

代码语言:javascript
复制
$re = '\s*(\w+)\s*=\s*(\S+)'
Get-Content \temp\foo.txt | 
  Foreach {$ht=@{}} {if ($_ -match $re) {$ht.($matches[1]) = $matches[2]}} {$ht}

Name                           Value
----                           -----
age                            7
server                         \\server\
destination                    \\nas\public\server\
票数 3
EN

Stack Overflow用户

发布于 2011-03-24 08:21:50

首先,修改您的txt以应用我将要教给您的方法。在地下,值部分的每个字符串都必须传递c#解释,所以像\s或\p这样的东西是不好的,因为它们没有任何意义。所以要有一个反斜杠,你需要用反斜杠对它进行转义,例如\\表示两个反斜杠。修复文件后,您必须读取文件的所有内容并应用convertfrom-stringdata cmdlet。这是代码,享受。

代码语言:javascript
复制
>> $textfromfile = [IO.File]::ReadAllText((resolve-path .\keyval.txt))
>> $hash = ConvertFrom-StringData $textfromfile
>> $hash

Name                           Value
----                           -----
server                         \\server\
age                            7
destination                    \nas\public\server

PD:修改文件为一行

代码语言:javascript
复制
>> (gc .\keyval.txt) | % { $_ -replace '\\', '\\'} | Set-Content .\keyval.txt
票数 2
EN

Stack Overflow用户

发布于 2011-03-24 11:05:10

代码语言:javascript
复制
 $h = @{}
 gc keyval.txt |% {
 $h[$_.split("=")[0].trim()] = $_.split("=")[1].trim()
 }
 $h 
 $h.get_item("server")
 $h.server

 Name                                 Value                                                                                      
 ----                           -----                                                                                      
 age                            7                                                                                          
 server                         \\server\                                                                                  
 destination                    \\nas\public\server\                                                                       
 \\server\
 \\server\
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5413035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档