পাওয়ারশেল স্ক্রিপ্ট সহ একটি কনফিগার ফাইল (ini, conf,…) কীভাবে ব্যবহার করবেন?


14

পাওয়ারশেল স্ক্রিপ্ট সহ কোনও কনফিগারেশন ফাইল ব্যবহার করা কি সম্ভব?

উদাহরণস্বরূপ, কনফিগারেশন ফাইল:

#links
link1=http://www.google.com
link2=http://www.apple.com
link3=http://www.microsoft.com

এবং তারপরে PS1 স্ক্রিপ্টে এই তথ্যটি কল করুন:

start-process iexplore.exe $Link1

উত্তর:


17

ডেনিস এবং টিম আপনার সাহায্যের জন্য অনেক ধন্যবাদ! আপনার উত্তর আমাকে ভাল ট্র্যাক উপর করা এবং আমি পাওয়া এই

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

বিদ্যুৎ কম্যান্ড

#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]) } }

তারপর

কোড স্নিপেট কার্যকর করার পরে, একটি ভেরিয়েবল ($ এইচ) একটি হ্যাশ টেবিলের মান ধারণ করে।

Name                           Value
----                           -----
MySetting1                     value
VerboseLogging                 True
WaitForTime                    20
OutputFile                     "C:\output.log"
InputFile                      "C:\Users.txt"

টেবিল থেকে কোনও আইটেম উদ্ধার করতে কমান্ডটি ব্যবহার করুন $h.Get_Item("MySetting1").*


4
আপনি আরও বন্ধুত্বপূর্ণ $ এইচ। মাইসেটিং 1
রায়ান শিলিংটন

আমি এই উত্তরটিতে প্রদর্শিত একই একই .txt ফাইলটি ব্যবহার করেও পার্সার কোড (কোনও পরিবর্তন নেই) => 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কারও কি এটি সঠিকভাবে কাজ করছে?
শিব

আপনার যদি কনফিগার করা ফাইল না থাকে [Sections]বা ; semicolon comments, আপনি ঠিক করতে পারেন$config = Get-Content $ConfigPath | ConvertFrom-StringDataবিশদটির জন্য কনভার্টফর্ম-স্ট্রিংডেটা দেখুন ।
আসিমিরনভ

4

এখানে একটি ভাল থ্রেড রয়েছে যা এই কোডটি দেখায় (লিঙ্কযুক্ত থ্রেডের উদ্ধৃতি দিয়ে):

# 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

তারপরে আপনি এটি করতে পারেন:

PS> $links = import-ini links.ini
PS> $links["search-engines"]["link1"]
http://www.google.com
PS> $links["vendors"]["link1"]
http://www.apple.com

এমন একটি INI ফাইল ধরে যাচ্ছি:

[vendors]
link1=http://www.apple.com
[search-engines]
link1=http://www.google.com

দুর্ভাগ্যক্রমে লিঙ্কে রেজিক্সগুলি কোড থেকে নিখোঁজ রয়েছে সুতরাং আপনাকে সেগুলি পুনরুত্পাদন করতে হবে, তবে এমন একটি সংস্করণ রয়েছে যা বিভাগ শিরোনাম এবং মন্তব্যগুলি না করে লাইনগুলি ফাইল পরিচালনা করে।


এর switchসাথে আরও একটি কেস যুক্ত করে আপনি সহজেই মন্তব্যগুলি পরিচালনা করতে পারেন '^#' {}। এছাড়াও আপনি ডট দিয়ে হ্যাশটেবল সামগ্রীগুলিও অ্যাক্সেস করতে পারেন, তাই $links.vendors.link1খুব বেশি কাজ করা উচিত যা পড়ার জন্য আরও ভাল হতে পারে।
জয়ে

2

হ্যাঁ, আপনি যে সেমিডলেটগুলি সন্ধান করছেন তা হ'ল প্রাপ্ত সামগ্রী এবং নির্বাচন-স্ট্রিং।

$content=get-content C:\links.txt
start-process iexplore.exe $content[0]

0

আরও ব্যাপক পদ্ধতির জন্য https://github.com/alekdavis/ConfigFile বিবেচনা করুন । এই মডিউলটি JSON ফর্ম্যাটে কনফিগার ফাইলগুলির পাশাপাশি আইএনআই সমর্থন করে। এটি চলকগুলি প্রসারিত করতে দেয় এবং কয়েকটি ঝরঝরে কৌশল করে। মনে রাখার বিষয়টি হ'ল আইএনআই ফাইলের মূল-মান জোড়ার নামগুলি অবশ্যই স্ক্রিপ্টের প্যারামিটার বা ভেরিয়েবলের নামের সাথে মিলে যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.