كيفية إعادة توجيه إخراج PowerShell إلى ملف أثناء تنفيذه
-
06-07-2019 - |
سؤال
لدي برنامج PowerShell النصي الذي أرغب في إعادة توجيه الإخراج إليه إلى ملف.المشكلة هي أنني لا أستطيع تغيير طريقة استدعاء هذا البرنامج النصي.لذلك لا أستطيع أن أفعل:
.\MyScript.ps1 > output.txt
كيف يمكنني إعادة توجيه مخرجات البرنامج النصي PowerShell أثناء تنفيذه؟
المحلول
وربما Start-Transcript
سيعمل لك. أولا وقف لو انها تعمل بالفعل، ثم تشغيله، ووقفها عند الانتهاء.
$ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" Start-Transcript -path C:\output.txt -append # Do some stuff Stop-Transcript
ويمكنك أيضا أن يكون هذا الركض بينما كان يعمل على الأشياء، وأنها إنقاذ جلسات سطر الأوامر الخاص بك للرجوع إليها فيما بعد.
إذا كنت ترغب في منع تماما الخطأ عند محاولة وقف نص غير الاختزال، هل يمكن أن تفعل هذا:
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue" # or "Stop"
نصائح أخرى
أعلن على موقع الويب بوويرشيل واتصالات (2012-02-15 في 16:40) أنه في الإصدار 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
وانظر "about_Redirection" المادة المساعدة للحصول على التفاصيل والأمثلة على ذلك.
help about_Redirection
استخدم:
Write "Stuff to write" | Out-File Outputfile.txt -Append
أحد الحلول الممكنة، إذا كان وضعك يسمح بذلك:
- أعد تسمية MyScript.ps1 إلى TheRealMyScript.ps1
قم بإنشاء MyScript.ps1 جديد يبدو كما يلي:
. heRealMyScript.ps1 > ملف الإخراج.txt
وأنا أعتبر يمكنك تعديل MyScript.ps1
. ثم محاولة تغييره مثل ذلك:
$(
Here is your current script
) *>&1 > output.txt
ولقد حاول هذا مع بوويرشيل 3. يمكنك استخدام جميع الخيارات إعادة توجيه كما هو الحال في <لأ href = "https://stackoverflow.com/questions/1215260/how-to-redirect-the-output-of-a -powershell-إلى-ملف-خلال-في-تنفيذ / 2916392 # 2916392 "> ناثان هارتلي في الإجابة .
وقد ترغب في إلقاء نظرة على الأمر cmdlet المحملة كائن أ >. يمكنك انتاج الأنابيب إلى المحملة، وسوف الكتابة إلى خطوط الأنابيب وأيضا إلى ملف
powershell ".\MyScript.ps1" > test.log
إذا كنت ترغب في إعادة توجيه التوالي من كافة الإخراج إلى ملف، حاول استخدام *>>
:
# 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.
إذا كنت تريد أن تفعل ذلك من سطر الأوامر وليس في صلب النص نفسه، الاستخدام:
.\myscript.ps1 | Out-File c:\output.csv
لتضمين هذا في السيناريو الخاص بك، يمكنك القيام بذلك مثل هذا:
Write-Output $server.name | Out-File '(Your Path)\Servers.txt' -Append
وهذا ينبغي أن تفعل خدعة.