Câu trả lời:
Cảm ơn rất nhiều vì sự giúp đỡ của bạn Dennis và Tim! Câu trả lời của bạn đưa tôi đi đúng hướng và tôi đã tìm thấy điều này
CÀI ĐẶT.TXT
#from http://tlingenf.spaces.live.com/blog/cns!B1B09F516B5BAEBF!213.entry
#
[General]
MySetting1=value
[Locations]
InputFile="C:\Users.txt"
OutputFile="C:\output.log"
[Other]
WaitForTime=20
VerboseLogging=True
QUY TẮC POWERSHELL
#from http://tlingenf.spaces.live.com/blog/cns!B1B09F516B5BAEBF!213.entry
#
Get-Content "C:\settings.txt" | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } }
sau đó
Sau khi thực thi đoạn mã, một biến ($ h) sẽ chứa các giá trị trong HashTable.
Name Value
---- -----
MySetting1 value
VerboseLogging True
WaitForTime 20
OutputFile "C:\output.log"
InputFile "C:\Users.txt"
* Để lấy một mục từ bảng, sử dụng lệnh $h.Get_Item("MySetting1").*
Index was outside the bounds of the array. At C:\testConfigreader.ps1:13 char:264 + ... -ne $True)) { $h.Add($k[0], $k[1]) } } + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException + FullyQualifiedErrorId : System.IndexOutOfRangeException
Có ai có điều này hoạt động chính xác không?
[Sections]
hoặc ; semicolon comments
, bạn có thể làm $config = Get-Content $ConfigPath | ConvertFrom-StringData
. Xem ConvertFrom-StringData để biết chi tiết.
Có một chủ đề tốt ở đây hiển thị mã này (trích dẫn từ luồng được liên kết):
# from http://www.eggheadcafe.com/software/aspnet/30358576/powershell-and-ini-files.aspx
param ($file)
$ini = @{}
switch -regex -file $file
{
"^\[(.+)\]$" {
$section = $matches[1]
$ini[$section] = @{}
}
"(.+)=(.+)" {
$name,$value = $matches[1..2]
$ini[$section][$name] = $value
}
}
$ini
Sau đó, bạn có thể làm:
PS> $links = import-ini links.ini
PS> $links["search-engines"]["link1"]
http://www.google.com
PS> $links["vendors"]["link1"]
http://www.apple.com
Giả sử một tệp INI trông như thế này:
[vendors]
link1=http://www.apple.com
[search-engines]
link1=http://www.google.com
Thật không may, các biểu thức chính bị thiếu trong mã tại liên kết nên bạn sẽ phải sao chép chúng, nhưng có một phiên bản xử lý các tệp mà không có tiêu đề phần và dòng là nhận xét.
switch
với '^#' {}
. Ngoài ra, bạn cũng có thể truy cập nội dung có thể băm bằng dấu chấm, do đó, cũng $links.vendors.link1
nên hoạt động để đọc tốt hơn một chút.
Để có cách tiếp cận toàn diện hơn, hãy xem xét https://github.com/alekdavis/ConfigFile . Mô-đun này hỗ trợ các tệp cấu hình ở định dạng JSON, cũng như INI. Nó cho phép mở rộng các biến và thực hiện một vài thủ thuật gọn gàng. Điều cần nhớ là tên của các cặp khóa-giá trị trong tệp INI phải khớp với tên của các tham số hoặc biến tập lệnh.