পাওয়ারশেলের আউটপুট কীভাবে কার্যকর করার সময় কোনও ফাইলে পুনর্নির্দেশ করা যায়


198

আমার কাছে পাওয়ারশেল স্ক্রিপ্ট রয়েছে যার জন্য আমি আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করতে চাই। সমস্যাটি হ'ল এই স্ক্রিপ্টটি যেভাবে বলা হয় তা পরিবর্তন করতে পারি না। সুতরাং আমি করতে পারি না:

 .\MyScript.ps1 > output.txt

পাওয়ারশেল স্ক্রিপ্টের সম্পাদনার সময় আমি কীভাবে পুনর্নির্দেশ করব?

উত্তর:


192

Start-Transcriptআপনার জন্য কাজ করতে পারে । এটি ইতিমধ্যে চালু থাকলে প্রথমে এটি বন্ধ করুন, তারপরে এটি শুরু করুন, এবং হয়ে গেলে এটি বন্ধ করুন।

$ ErrorActionPreference = "SilentlyContinue"
স্টপ-ট্রান্সক্রিপ্ট | আউট-নাল
$ ত্রুটিঅ্যাকশনপ্রিফারেন্স = "চালিয়ে যান"
স্টার্ট-ট্রান্সক্রিপ্ট -পথ সি: \ আউটপুট.টেক্সট-অ্যাপেন্ড
# কিছু জিনিস
স্টপ-প্রতিলিপি

স্টাফের উপর কাজ করার সময় আপনি এই দৌড়াতে পারেন এবং এটি পরবর্তী নির্দেশের জন্য আপনার কমান্ড লাইন সেশনগুলি সংরক্ষণ করতে পারেন।

প্রতিলিপি নয় এমন প্রতিলিপি বন্ধ করার চেষ্টা করার সময় আপনি যদি ত্রুটিটি পুরোপুরি দমন করতে চান তবে আপনি এটি করতে পারেন:

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"

13
নোট করুন যে স্টার্ট-ট্রান্সক্রিপ্ট লিখন-ত্রুটি, লিখন-ভার্বোস, বা রাইট-ডিবাগ ... কেবলমাত্র স্ট্যান্ডার্ড আউটপুট রেকর্ড করে না।
রিচার্ড বার্গ

6
@ রিচার্ড: এটি এখনই করা হচ্ছে বলে মনে হচ্ছে। সম্ভবত এটি একটি ২.০ সংযোজন, নিশ্চিত নয় যে এই উত্তরগুলি সমস্ত 1.0 এ প্রয়োগ হয় কিনা not
রবার্ট এস সিয়াসিও

আমি উপরে প্রায় একই কোড ব্যবহার করছি। আমার সমস্যাটি হ'ল, স্টপ-ট্রান্সক্রিপ্ট | আউট-নাল ট্রান্সক্রিপশন শুরু না করা থাকলে ত্রুটি আউটপুট প্রেরণ করে। আমার বার্তাটি আমার লেআউটটি মিস করায় আমাকে দমন করা দরকার। -অরোগ্রেশন নিঃশব্দে নিয়ন্ত্রণও কোনও উপকারে আসে না। কোন ধারনা?
মেল

4
শেষ অবধি, আমি স্টার্ট-ট্রান্সক্রিপ্টের জন্য ডকগুলি পেয়েছি । (হতাশার সাথে পাওয়ারশেল সংস্করণ নম্বর সহ লেবেলযুক্ত নয়)। এতে বলা হয়েছে "ট্রান্সক্রিপ্টটিতে সমস্ত কমান্ড অন্তর্ভুক্ত রয়েছে যা ব্যবহারকারীরা টাইপ করে এবং কনসোলে প্রদর্শিত সমস্ত আউটপুট"। যাইহোক, আমি পাওয়ারশেল ২.০ এ স্টার্ট-ট্রান্সক্রিপ্ট পরীক্ষা করেছি এবং খুঁজে পেয়েছি @ রিচার্ড সঠিক, ট্রান্সক্রিপ্টটিতে মানক ত্রুটি সংরক্ষণ করা হয়নি । এই স্তন্যপান!
কর্নেল আতঙ্ক 13

এই পদ্ধতিটি আপনাকে সতর্ক করে বলে মনে হচ্ছে না যদি আপনি নির্দিষ্ট স্থানে লেখার অনুমতি পেয়ে থাকেন।
ডেমোঙ্গোলেম

51

মাইক্রোসফ্ট পাওয়ারশেলের সংযোগগুলি ওয়েব সাইটে (২০১২-০২-১৫ এ ৪:৪০ পিএম) ঘোষণা করেছে যে 3.0.০ সংস্করণে তারা এই সমস্যার সমাধান হিসাবে পুনঃনির্দেশকে বাড়িয়েছে।

In PowerShell 3.0, we've extended output redirection to include the following streams: 
 Pipeline (1) 
 Error    (2) 
 Warning  (3) 
 Verbose  (4) 
 Debug    (5)
 All      (*)

We still use the same operators
 >    Redirect to a file and replace contents
 >>   Redirect to a file and append to existing content
 >&1  Merge with pipeline output

বিশদ এবং উদাহরণগুলির জন্য "সম্পর্কে_পরিচালনা" সহায়তা নিবন্ধটি দেখুন।

help about_Redirection

1
বলছি না আমি এই সমাধানটি পছন্দ করি। আসলে, আমি এটি দেখতে কুৎসিত, মনে রাখা শক্ত এবং জটিল নয়। আউট- *, স্টেট কন্টেন্ট এবং অ্যাড-কনটেন্ট সিএমডলেটগুলিতে স্ট্রিম ক্যাপচারিং প্যারামিটার যুক্ত করার মতো মনে হচ্ছে আরও পাওয়ারশেলি ফ্যাশনে কৌশলটি সম্পন্ন করা হত। তারা এটিতে থাকাকালীন তাদের একটি -পাসথ্রু প্যারামিটার যুক্ত করা উচিত। যা কার্যকরভাবে টি-অবজেক্ট সিএমডলেট অপ্রচলিতকে কম কার্যকর করবে effectively
নাথান হার্টলি

আমি বিভ্রান্ত, এই প্রশ্নের উত্তর কীভাবে জিজ্ঞাসা করা হচ্ছে? "পাওয়ার
এক্সপ্লোরের

আপনি ঠিক বলেছেন, @ জোরেদাছে, আমি মনে করি "এই স্ক্রিপ্টটি যেভাবে বলা হয় তার প্রয়োজনীয়তাটি" পরিবর্তন করতে পারে না। বেশিরভাগ আউটপুট ক্যাপচার করার সময়, স্টার্ট-ট্রান্সক্রিপ্ট হ'ল উপায়। আমার এই উত্তরটি সরিয়ে দেওয়া উচিত?
নাথান হার্টলি

1
সাধারণ পুনঃনির্দেশের জন্য এখানে যারা আসছেন তাদের জন্য, পাওয়ারশেল তখন থেকে -আউটরিয়েবল-ওয়ার্নিংয়েভেরিয়েবল -অরারভেয়ারেবল যুক্ত করেছেন, যা আমার 3 জানুয়ারীর '14 এর মন্তব্যকে সরাসরি উত্তর দেয়।
নাথান হার্টলি

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

36

ব্যবহার করুন:

Write "Stuff to write" | Out-File Outputfile.txt -Append

2
ওপির প্রশ্নটি সমাধান করে না কারণ এটি "কার্যকর করার সময়" কাজ করে না। তবে আমি এটি +1 দিয়েছি কারণ যেভাবে যাইহোক পাওয়ারশেলের পাইপ কীভাবে করা যায় তা জানা দরকারী।
পল মাস্রি-স্টোন

28

আমি এটি আপনি পরিবর্তন করতে পারেন নিতে MyScript.ps1। তারপরে এটির মতো পরিবর্তন করার চেষ্টা করুন:

$(
    Here is your current script
) *>&1 > output.txt

আমি শুধু PowerShell 3. সঙ্গে এই চেষ্টা আপনি সব পুনর্নির্দেশ অপশন ব্যবহার করতে পারেন নাথান হার্টলি এর উত্তর


আমি এই সমাধানটি পছন্দ করি। আপনি সংযোজন করতে >> output.txt ব্যবহার করতে পারেন। কেউ কি জানেন যে ইউনিকোডের পরিবর্তে এই ক্রিয়েটি এসিআই করার কোনও উপায় আছে?
অধ্যাপক ভন লেমনগারগল

1
আপনি *>&1 | Out-File $log -Encoding ascii -Append -Width 132এটির মতো কিছু চেষ্টা করতে পারেন: তবে আউটপুটটিকে অবশ্যই সঠিকভাবে নিয়ন্ত্রণ করতে হবে তবে পাওয়ারশেল সত্যিই কুশ্রী।
এমপিএল ওয়ার্ক

এটি আপনার স্ক্রিপ্টের মধ্যে যেমন কাজ করে তেমনটি আমি পছন্দ করি। যোনিদের জন্য উপযুক্ত।
ব্যবহারকারী3505901

25

একটি সম্ভাব্য সমাধান, যদি আপনার পরিস্থিতি এটির অনুমতি দেয়:

  1. MyScript.ps1 এর নামটি TheRealMyScript.ps1 এ দিন
  2. এমন একটি নতুন MyScript.ps1 তৈরি করুন যা দেখে মনে হচ্ছে:

    । \ TheRealMyScript.ps1> output.txt


18
powershell ".\MyScript.ps1" > test.log

1
এই ছিল শুধুমাত্র অনেক অপশন যে আমার স্ক্রিপ্ট আউটপুট জন্য কাজ করুন।
Cori

17

আপনি সেমিডলেট টি- অবজেক্টটি একবার দেখে নিতে পারেন । আপনি টিতে আউটপুট পাইপ করতে পারেন এবং এটি পাইপলাইনে এবং একটি ফাইলকেও লিখতে পারে


1
"আউটপুট" | সেট-সামগ্রী -পাসথ্রু এবং "আউটপুট" | অ্যাড-কনটেন্ট -পাসথ্রু এছাড়াও এন-কোডিং সেট করতে পারে এমন অতিরিক্ত বেনিফিট সহ টি-অবজেক্টের মতো কাজ করবে।
নাথান হার্টলি

15

আপনি যদি কোনও ফাইলে সমস্ত আউটপুটকে সরাসরি পুনর্নির্দেশ করতে চান তবে এটি ব্যবহার করে দেখুন *>>:

# You'll receive standard output for the first command, and an error from the second command.
mkdir c:\temp -force *>> c:\my.log ;
mkdir c:\temp *>> c:\my.log ;

যেহেতু এটি ফাইলের দিকে সরাসরি পুনর্নির্দেশ, এটি কনসোলে আউটপুট দেয় না (প্রায়শ সহায়ক)। আপনি যদি কনসোল আউটপুটটি চান, সমস্ত আউটপুট একত্রিত করে *&>1এবং তারপরে পাইপ করুন Tee-Object:

mkdir c:\temp -force *>&1 | Tee-Object -Append -FilePath c:\my.log ;
mkdir c:\temp *>&1 | Tee-Object -Append -FilePath c:\my.log ;

# Shorter aliased version
mkdir c:\temp *>&1 | tee -Append c:\my.log ;

আমি বিশ্বাস করি যে এই কৌশলগুলি পাওয়ারশেল 3.0.০ বা তার পরে সমর্থিত; আমি পাওয়ারশেল 5.0 এ পরীক্ষা করছি।


4

আপনি যদি কমান্ড লাইন থেকে এটি করতে চান এবং স্ক্রিপ্টে নিজেই তৈরি না করে থাকেন তবে:

.\myscript.ps1 | Out-File c:\output.csv

7
প্রশ্নকারী স্পষ্টভাবে ব্যাখ্যা করছে যে স্ক্রিপ্ট কলটি পরিবর্তন করা যায় না।
ফের

2
প্রশ্নের সাথে সম্পর্কিত নয়, তবে আমার জন্য সহায়ক, আমি পাইপ টু আউট-ফাইলের সাথে সঠিক সিনট্যাক্স পেতে গুগল করছি।
gReX

0

আপনার স্ক্রিপ্ট এ এম্বেড করতে, আপনি এটি এর মতো করতে পারেন:

        Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append

কৌতুক করা উচিত।

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