【发布时间】:2020-06-03 21:43:03
【问题描述】:
当键是变量时,我似乎无法返回与键匹配的值。
我从一个名为 projects.txt 的文件开始,如下所示:
"ID","Name"
"0d769684e36e4cee83b26e8a2b42401b","admin"
"1ba56baa693841199c21b822ccd21dd4","Support"
然后我通过以下方式以key=value 对格式制作第二个文件:
foreach ($line in (Get-Content -encoding ASCII .\projects.txt | select-object -skip 1)){
$proj_array = $line.split(',')
$proj_id = $proj_array[0] -Replace '"',""
$proj_name = $proj_array[1]
"$proj_id=$proj_name" | out-file -append -encoding ASCII projects_hash.txt
}
projects_hash.txt 看起来像这样:
0d769684e36e4cee83b26e8a2b42401b="admin"
1ba56baa693841199c21b822ccd21dd4="Support"
所以现在我试图通过(proj_id 之前定义)返回与 id 匹配的值:
$projects = convertfrom-stringdata (get-content .\projects_hash.txt -raw)
$proj_name = "$projects.$proj_id"
Write-Host "Project name is $proj_name"
哪些输出:
Project name is System.Collections.Hashtable.2dbba23a878e47b19e6913315edfb3ef
Project name is System.Collections.Hashtable.3b4cb7dc3ebf4177b00bbee0c6bb5c12
如果我将行 $proj_name = $projects.$proj_id 更改为 $proj_name = $projects[$proj_id] 我得到这个输出:
Project name is System.Collections.Hashtable[3b4cb7dc3ebf4177b00bbee0c6bb5c12]
如何才能成功检索到与键匹配的值?
【问题讨论】:
-
看起来你的文件
projects.txt实际上是一个合适的csv文件。你为什么不这样对待它?我想这会让你的生活更轻松。 ;-) -
您需要将密钥括在引号中以将其用于查找。你可以使用
$projects.'0d769684e36e4cee83b26e8a2b42401b'来获取"admin"如果你想去掉值上的引号,把它们从你的文件中删除。 ///// 顺便说一句,你为什么要使用这种迂回方法?您可以使用$Array.Where({})快速过滤 - 如果您的收藏相当小.. -
就像@Olaf 所说,使用
import-csv会比你的获取内容方法容易得多:) -
而不是输出到
projects_hash.txt你应该把它变成一个json文件,它可以处理一些额外的东西:)。 -
不要执行 foreach 循环的最后一行,而是尝试执行
$var=@" {"hash":"admin","hash2":"support"} "@然后$var = $var |convertfrom-json然后将 $var 输出到文件
标签: powershell hashtable