[英]Powershell: Can't access value from file when key is a variable
當鍵是變量時,我似乎無法返回與鍵匹配的值。
我從一個名為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"
所以現在我試圖返回與 id 匹配的值( proj_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]
我得到這個 output:
Project name is System.Collections.Hashtable[3b4cb7dc3ebf4177b00bbee0c6bb5c12]
如何成功檢索與鍵匹配的值?
如果我做對了並且源數據采用了您發布的格式,則您無需執行字符串雜技即可將輸入數據轉換為可用格式。 ;-)
您可以使用 Import-Csv 導入源數據。
$SourceData =
@'
"ID","Name"
"0d769684e36e4cee83b26e8a2b42401b","admin"
"1ba56baa693841199c21b822ccd21dd4","Support"
'@ |
ConvertFrom-Csv
現在您已經擁有結構化數據,您可以按照自己的方式對其進行過濾。 不管是身份證...
$DesiredID = "1ba56baa693841199c21b822ccd21dd4"
$SourceData |
Where-Object -Property ID -EQ -Value $DesiredID
或者按名字...
$DesiredName = "admin"
$SourceData |
Where-Object -Property Name -EQ -Value $DesiredName
編輯:
只是要非常清楚這一點:我不建議使用 ConvertFrom-Csv。 這只是為了使代碼更容易從 SO 復制和運行。 導入源數據的推薦方式如下:
$SourceData =
Import-Csv -Path .\projects.txt -Delimiter ','
我個人會建議@Olaf 的方法,但我在這里提供一種替代方法。
您可以使用ConvertFrom-Json
而不是使用ConvertFrom-Csv
,結果將是相似的。
$jsonvar = @"
{}
"@
$jsonvar = $jsonvar | ConvertFrom-Json
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]
$jsonvar | add-member -value "$proj_name" -name "$proj_id" -MemberType NoteProperty
}
$jsonvar | convertto-json > .\projects_hash.txt
$tempo = get-content .\projects_hash.txt
$projects = @"
$tempo
"@
$projects = $projects | convertfrom-json
$proj_name = $projects.$proj_id
Write-Host "Project name is $proj_name"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.