পাওয়ারশেল সেট-সামগ্রী এবং আউট-ফাইল - পার্থক্য কী?


90

PowerShell সালে মধ্যে পার্থক্য কি Out-Fileএবং Set-Content? বা Add-Contentএবং Out-File -append?

আমি খুঁজে পেয়েছি যদি আমি একই ফাইলের বিপরীতে উভয়টি ব্যবহার করি তবে পাঠ্যটি সম্পূর্ণ মোজিবাক হয়েছে

(একটি গৌণ দ্বিতীয় প্রশ্ন: এর >জন্য একটি নাম আছে Out-File, তাই না?)

উত্তর:


96

পাওয়ারশেলের সাথে কয়েক মাসের অভিজ্ঞতার পরে এবং আমি কিছু বৈজ্ঞানিক পরীক্ষা-নিরীক্ষার পরে আমি কী কী অনুমান করেছি তার সংক্ষিপ্তসার এখানে দেওয়া হয়েছে। আমি ডকুমেন্টেশনে এর কোনও কিছুই পাইনি :(

[ আপডেট: এর বেশিরভাগ অংশই এখন আরও ভাল নথিভুক্ত বলে মনে হচ্ছে]]

লকিং পড়ুন এবং লিখুন

যদিও Out-Fileচলছে, অন্য অ্যাপ্লিকেশনে লগ ফাইল পড়তে পারেন।

যদিও Set-Contentচলছে, অন্যান্য অ্যাপ্লিকেশন লগ ফাইল পড়তে পারে না। সুতরাং দীর্ঘ চলমান কমান্ড লগ করতে কখনও ব্যবহারSet-Content করবেন না

এনকোডিং

Out-Fileডিফল্টরূপে Unicode( UTF-16LE) এটি এনকোডিংয়ে সংরক্ষণ করে (যদিও এটি নির্দিষ্ট করা যেতে পারে), তবে পাওয়ারশেল 3+ এ ( ) এটি Set-Contentডিফল্ট ASCII( US-ASCIIএটিও নির্দিষ্ট করা যেতে পারে)। আগের পাওয়ারশেল সংস্করণগুলিতে (এএনএসআই) এনকোডিংয়ের Set-Contentলিখিত সামগ্রী লিখেছিল Default

সম্পাদকের দ্রষ্টব্য : ডকুমেন্টেশনের দাবি থাকা সত্ত্বেও সংস্করণ -নির্দিষ্ট ("এএনএসআই") এনকোডিংয়ের সংস্করণ 5.1 হিসাবে পাওয়ারশেল এখনও ডিফল্ট রয়েছে Default। যদি ASCII ডিফল্ট হয় তবে নন-এএসসিআইআই অক্ষরগুলিকে আক্ষরিকü রূপান্তরিত করা হত , তবে সেটি নয় : ফলন । ?'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'$False

PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt

এর অর্থ দুটি কমান্ডের ডিফল্টটি বেমানান, এবং এগুলি মিশ্রণ করলে পাঠ্য ক্ষতিগ্রস্থ হবে so

ফর্ম্যাট করা

বারটেক যেমন ব্যাখ্যা করেছেন, Out-Fileআউটপুটটির অভিনব বিন্যাস সংরক্ষণ করে, যেমন টার্মিনালে দেখা যায়। সুতরাং দুটি ফাইল সহ একটি ফোল্ডারে, কমান্ডটি dir | out-file out.txt11 লাইনযুক্ত একটি ফাইল তৈরি করে।

যেখানে Set-Contentএকটি সহজ উপস্থাপনা সংরক্ষণ করে। দুটি ফোল্ডারে সেই ফোল্ডারে, কমান্ডটি dir | set-content sc.txtদুটি লাইনযুক্ত একটি ফাইল তৈরি করে। টার্মিনালে আউটপুট অনুকরণ করতে:

PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt

আমি বিশ্বাস করি লাইন ব্রেকগুলির জন্য এই ফর্ম্যাটটির একটি পরিণতি রয়েছে তবে আমি এখনও এটি বর্ণনা করতে পারি না।

ফাইল তৈরি

Set-Contentকখন Out-Fileযে নির্ভরযোগ্যভাবে একটি খালি ফাইল তৈরি করে না :

খালি ফোল্ডারে, কমান্ডটি dir | out-file out.txtএকটি ফাইল তৈরি করে, যখন dir | set-content sc.txtনা করে।

পাইপলাইন পরিবর্তনশীল

Set-Contentপাইপলাইন থেকে ফাইলের নাম নেয়; আপনাকে কিছু স্থির মান হিসাবে অনেকগুলি ফাইলের বিষয়বস্তু সেট করার অনুমতি দেয়।

Out-Fileপাইপলাইন থেকে তথ্য গ্রহণ; একটি একক ফাইলের সামগ্রী আপডেট করা।

পরামিতি

Set-Content নিম্নলিখিত অতিরিক্ত পরামিতি অন্তর্ভুক্ত:

  • বাদ দিন
  • ছাঁকনি
  • অন্তর্ভুক্ত
  • পাস করা
  • স্ট্রিম
  • ইউজট্রান্সঅ্যাকশন

Out-File নিম্নলিখিত অতিরিক্ত পরামিতি অন্তর্ভুক্ত:

  • সংযোজন
  • NoClobber
  • প্রস্থ

এই পরামিতিগুলি কী সম্পর্কে আরও তথ্যের জন্য, দয়া করে সহায়তা দেখুন; যেমন get-help out-file -parameter append


4
Set-Contentডিফল্ট এনকোডিং: অনুবাদ করা হয়েছে (Get-Culture).Textinfo.ANSICodePage(উইন্ডোজ 8.1, cs-CZপাওয়ারশেল 4.0 , কারেন্টকালচার en-GB, কারেন্ট ইউআইকচারাল , এএনসাইকোডপেজ 1250, ওএমকোডপেজ 852, 'řž'উপরের কোড পৃষ্ঠাগুলিতে বিভিন্ন কোড সহ স্ট্রিং ব্যবহার করে পরীক্ষিত )।
জোসেফজেড

এছাড়াও লক্ষ করুন যে Out-Fileনির্দিষ্ট পরিস্থিতিতে দীর্ঘ লাইনে সমস্যা রয়েছে। উদাহরণস্বরূপ: $x = [pscustomobject]@{A=('a' * 500); B=('b' * 500)}; $x | Out-File -Path myfile.txt
বেকন বিট

17

Out-File-NoClobberএবং / অথবা -Appendপতাকাটি সেট না করা থাকলে আউটপুট পাথ ওভাররাইটিংয়ের আচরণ করে। Add-Contentডিফল্টরূপে আউটপুট পাথ ইতিমধ্যে উপস্থিত থাকলে বিষয়বস্তু সংযোজন করবে (যদি তা পারে)। উভয়ই যদি ফাইলটি ইতিমধ্যে তৈরি না করে তৈরি করে।

আর একটি আকর্ষণীয় পার্থক্য হ'ল Add-Contentডিফল্টরূপে একটি ASCII এনকোডযুক্ত ফাইল Out-Fileতৈরি করবে এবং ডিফল্টরূপে একটি সামান্য এন্ডিয়ান ইউনিকোড এনকোডযুক্ত ফাইল তৈরি করবে।

>এর জন্য একটি ওরফে সিনট্যাকটিক চিনি Out-File। এটি Out-Fileকিছু পূর্বনির্ধারিত প্যারামিটার সেটিংস সহ।


ধন্যবাদ, এনকোডিং পার্থক্যগুলি জেনে রাখা দরকারী। আপনি একেবারেই সঠিক নন, আপনি যদি echo "" > $null | Add-Content abc.txtএটি করেনabc.txt তবে এটি ফাইলটি তৈরি করে না , যেখানে আউট-ফাইল হবে।
কর্নেল আতঙ্ক

@ ম্যাটহিকফোর্ড এটি একটি বিজোড় প্রান্তের উদাহরণ। এই কোড পাইপগুলিতে ull n নাল তাই Add-Contentকিছুই গ্রহণ করে না। যদি Add-Contentকিছু না পায় তবে এটি ফাইল তৈরি করতে হবে কেন? অন্যদিকে একই প্রশ্ন আউট-ফাইল সম্পর্কে জিজ্ঞাসা করা যেতে পারে।
অ্যান্ডি অরিস্মেন্দি

আমার কাছে পার্থক্যটি gci $folder | Out-File log.txt ; cat log.txtকাজ করে যেখানে gci $folder | Add-Content log.txt ; cat log.txtফুঁ দিয়ে উঠেছে
কর্নেল প্যানিক

@ ম্যাটহিকফোর্ড আমি সম্ভবত প্রক্রিয়া করার চেষ্টা করার আগে ফাইলটি বিদ্যমান ছিল তা নিশ্চিত করেছিলাম। সম্ভবত সমস্ত ভাষার জন্য একটি ভাল অভ্যাস।
অ্যান্ডি অরিস্মেন্দি

আর একটি পার্থক্য হ'ল Set-Contentব্যবহার করার সময়, ফাইলটি অন্যান্য অ্যাপ্লিকেশনগুলিতে অনুপলব্ধ।
কর্নেল আতঙ্ক

10

ঠিক আছে, আমি একমত হবে না ... :)

  1. আউট-ফাইল-এ্যাপেন্ড (হ'ল ওভাররাইটিং এড়াতে কোনও ক্লোবার নেই) যা অ্যাড-কন্টেন্ট করবে। তবে এটি একই জন্তু নয়।
  2. কমান্ড | অ্যাড-কন্টেন্ট ইনপুটটিতে .ToString () পদ্ধতি ব্যবহার করবে। আউট-ফাইল ডিফল্ট ফর্ম্যাটিং ব্যবহার করবে।

সুতরাং:

ls | Add-Content test.txt

এবং

ls | Out-File test.txt

আপনাকে সম্পূর্ণ ভিন্ন ফলাফল দেবে।

এবং না, '>' উপনাম নয়, এটি পুনর্নির্দেশ অপারেটর (অন্যান্য শেলের মতো)। এবং খুব মারাত্মক সীমাবদ্ধতা রয়েছে ... এটি প্রদর্শিত হবে একইভাবে লাইনগুলি কেটে দেবে। আউট-ফাইলে রয়েছে-প্রস্থের পরামিতি যা আপনাকে এড়াতে সহায়তা করে। এছাড়াও, পুনঃনির্দেশ অপারেটরগুলির সাথে আপনি কোন এনকোডিংটি ব্যবহার করবেন তা সিদ্ধান্ত নিতে পারেন না।

এইচটিএইচ বারটেক


4
এটি অর্থের একটি নাম >এবং আউট-ফাইল একই জিনিস। তারা একই কোড কল। ব্রুস পেইটের পাওয়ারশেল ইন অ্যাকশন দ্বিতীয় সংস্করণ (কিন্ডল লোকেশন 4646) থেকে:In fact, myScript > file.txt is just “syntactic sugar” for myScript | out-file -path file.txt In some cases, you’ll want to use Out-File directly because it gives you more control over the way the output is written.
অ্যান্ডি আরিস্মেন্দি

4
ডিফল্ট ফর্ম্যাটিং (আউট-ফাইল) বনাম টস্ট্রিং (অ্যাড-কনটেন্ট) সম্পর্কে ভাল পয়েন্ট
অ্যান্ডি

আমার বক্তব্যটি ছিল: যদিও উভয়ই সাধারণত একই রকম হয় তবে ওরফে এর পাওয়ার পাওয়ারের অর্থ রয়েছে ... সুতরাং আমি এই শব্দটি তাদের মধ্যে সম্পর্কের বর্ণনা দেওয়ার জন্য ব্যবহার করব না ..;) আলিয়াস কমান্ডকে প্রতিস্থাপন করে, এক্ষেত্রে এটি বাক্য গঠন করতে হবে : ls | > file.txt সম্ভব। স্পষ্টতই, এটি কাজ করবে না ...
বারটেকবি

4
ডিফল্ট ফর্ম্যাটিংটি প্রদত্ত অবজেক্টটি কনসোলে উপস্থাপনের উপায়ে। বেশিরভাগ কোর সেমিডলেট / অবজেক্ট টাইপের ফর্ম্যাটিং মেটাডেটা থাকে যা পাওয়ার-শেলকে ব্যবহারকারী-বান্ধব ফ্যাশনে কীভাবে প্রদর্শন করতে হয় তা অবহিত করে। অন্য কথায়: আউট-ফাইলে কমান্ডের পাইপিং ফলাফলগুলি পাওয়ারশেলের দ্বারা বিন্যাস বিন্যাস ছাড়াই ফাইলটিতে কমান্ডের আউটপুট সংরক্ষণ করতে ব্যবহৃত হতে পারে।
বারটেকবি

4
হ্যাঁ, আমি মনে করি এটি একটি গুরুত্বপূর্ণ পার্থক্য যা >এর সঠিক সমতুল্য নয় out-file। আপনি যদি সেট করেন $PSDefaultParameterValues["Out-File:Encoding"] = "UTF8", এটি দ্বারা উপেক্ষা করা হবে >
উইসবাকী

3

Set-Contentসমর্থন করে -Encoding Byte, যখনOut-File না।

সুতরাং আপনি যখন বাইনারি ডেটা বা Text.Encoding#GetBytes()কোনও ফাইলের ফলাফল লিখতে চান , আপনার ব্যবহার করা উচিত Set-Content


0

আউট-ফাইল-অ্যাপেন্ড বা ">>" একই ফাইলটিতে দুটি এনকোডিং মিশ্রিত করতে পারে। এমনকি ফাইলটি মূলত এসকি বা অ্যানসি থাকলেও এটি এর নীচে ডিফল্টরূপে ইউনিকোড যুক্ত করবে। অ্যাড-কন্টেন্ট এনকোডিংটি পরীক্ষা করবে এবং সংযোজনের আগে এটি মেলে। বিটিডব্লিউ, এক্সপোর্ট-সিএসভি অ্যাস্কেই ডিফল্ট (কোনও অ্যাকসেন্ট নেই), এবং আনসিতে কনটেন্ট / অ্যাড-কনটেন্ট সেট করুন।


0

এনকোডিংয়ের ক্ষেত্রে পার্থক্যটি যুক্ত করতে চেয়েছিলেন:

পাওয়ারশেল 5.1 সহ উইন্ডোজ:

  • আউট-ফাইল - ডিফল্ট এনকোডিং হল utf-16le
  • সেট-সামগ্রী - ডিফল্ট এনকোডিংটি আমাদের-এএসআইএসআই

পাওয়ারশেল 7.1 সহ লিনাক্স:

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