Yanıtlar:
Dennis ve Tim yardımlarınız için çok teşekkürler! Cevaplarınız doğru yolda beni koymak ve buldum bu
settings.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
POWERSHELL KOMUTANLIĞI
#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]) } }
sonra
Kod snippet'ini yürüttükten sonra, bir değişken ($ h) bir HashTable'daki değerleri içerir.
Name Value
---- -----
MySetting1 value
VerboseLogging True
WaitForTime 20
OutputFile "C:\output.log"
InputFile "C:\Users.txt"
* Tablodan bir öğe almak için şu komutu kullanın: $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
Herkes bu düzgün çalışıyor mu rağmen, regex ayrıştırıcı satırında sınırlar istisna dışında bir dizi olsun.
[Sections]
ya da ; semicolon comments
yapabilirsiniz, sadece yapabilirsiniz $config = Get-Content $ConfigPath | ConvertFrom-StringData
. Ayrıntılar için bkz . ConvertFrom-StringData .
Burada bu kodu gösteren iyi bir iş parçacığı var (bağlı iş parçacığından alıntı):
# 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
Sonra şunları yapabilirsiniz:
PS> $links = import-ini links.ini
PS> $links["search-engines"]["link1"]
http://www.google.com
PS> $links["vendors"]["link1"]
http://www.apple.com
Şuna benzeyen bir INI dosyası varsayarsak:
[vendors]
link1=http://www.apple.com
[search-engines]
link1=http://www.google.com
Maalesef, regex'ler bağlantıdaki kodda eksik olduğundan, bunları yeniden oluşturmanız gerekecek, ancak bölüm üstbilgileri ve satırları olmayan dosyaları işleyen bir sürüm var.
switch
ile '^#' {}
. Ayrıca hashtable içeriklere bir nokta ile de erişebilirsiniz, bu yüzden $links.vendors.link1
de çalışmak biraz daha iyi olabilir.
Daha kapsamlı bir yaklaşım için https://github.com/alekdavis/ConfigFile adresini göz önünde bulundurun . Bu modül INI'nin yanı sıra JSON biçimindeki yapılandırma dosyalarını da destekler. Değişkenleri genişletmeye izin verir ve birkaç düzgün numara yapar. Hatırlanması gereken şey, INI dosyasındaki anahtar / değer çiftlerinin adlarının komut dosyası parametrelerinin veya değişkenlerinin adlarıyla eşleşmesi gerektiğidir.