এই উত্তরটি আপনার পক্ষে নয় , যদি আপনি:
- খুব কমই, যদি কখনও বাহ্যিক সিএলআই ব্যবহার করা প্রয়োজন (যা সাধারণত চালানোর জন্য মূল্যবান - পাওয়ারশেল-নেটিভ কমান্ডগুলি একসাথে আরও ভাল খেলে এবং এ জাতীয় বৈশিষ্ট্যের কোনও প্রয়োজন নেই)।
- বাশের প্রক্রিয়া বিকল্পের সাথে পরিচিত নয়।
এই উত্তরটি আপনার পক্ষে , যদি আপনি:
- ঘন ঘন বহিরাগত সিএলআই ব্যবহার করুন (অভ্যাসের বাইরে বা (ভাল) পাওয়ারশেল-নেটিভ বিকল্পগুলির অভাবের কারণে), বিশেষত স্ক্রিপ্টগুলি লেখার সময়।
- বাশের প্রক্রিয়া প্রতিস্থাপন কী করতে পারে তা ব্যবহার এবং প্রশংসা করা হয়।
- আপডেট : এখন যে ইউনিক্স প্ল্যাটফর্মগুলিতেও পাওয়ারশেল সমর্থিত, এই বৈশিষ্ট্যটি আরও আগ্রহী - গিটহাবে এই বৈশিষ্ট্যটির অনুরোধটি দেখুন, যা পরামর্শ দেয় যে পাওয়ারশেল প্রতিস্থাপন প্রক্রিয়া করার মতো একটি বৈশিষ্ট্য প্রয়োগ করে।
ইউনিক্স বিশ্বে, বাশ / কেএসএ / জেডএসে, একটি প্রক্রিয়া প্রতিস্থাপনটি কমান্ড আউটপুটকে চিকিত্সা করার প্রস্তাব দেয় যেন এটি একটি অস্থায়ী ফাইল যা নিজের পরে পরিষ্কার হয়ে যায়; উদাহরণস্বরূপ cat <(echo 'hello')
, যেখানে কমান্ড cat
থেকে আউটপুট কমান্ড আউটপুট ধারণকারী অস্থায়ী ফাইলের পথecho
হিসাবে দেখায় ।
যদিও পাওয়ারশেল-নেটিভ কমান্ডগুলির এমন বৈশিষ্ট্যের কোনও সত্য প্রয়োজন নেই, বাহ্যিক সি এল এল-এর সাথে কাজ করার সময় এটি কার্যকর হতে পারে ।
পাওয়ারশেলের বৈশিষ্ট্যটি অনুকরণ করা জটিল , তবে এটি আপনার পক্ষে মূল্যবান হতে পারে যদি আপনি নিজেকে প্রায়শই এটির প্রয়োজন মনে করেন।
cf
স্ক্রিপ্ট ব্লক গ্রহন করে, ব্লকটি কার্যকর করে এবং তার আউটপুট কোনও টেম্পে লিখে দেয় এমন একটি ফাংশন চিত্রযুক্ত করুন। চাহিদার ভিত্তিতে ফাইল তৈরি হয়েছে এবং অস্থিরতা ফিরিয়ে দেয়। ফাইলের পথ ; উদাহরণ:
findstr.exe "Windows" (cf { Get-ChildItem c:\ }) # findstr sees the temp. file's path.
এটি একটি সাধারণ উদাহরণ যা এই জাতীয় বৈশিষ্ট্যের প্রয়োজনের চিত্রিত করে না doesn't psftp.exe
এসএফটিপি স্থানান্তরগুলির জন্য সম্ভবত আরও দৃ conv়প্রবণ দৃশ্যের ব্যবহার : এর ব্যাচ (স্বয়ংক্রিয়) ব্যবহারের জন্য পছন্দসই কমান্ডগুলি অন্তর্ভুক্ত একটি ইনপুট ফাইল সরবরাহ করা প্রয়োজন , যেখানে এই জাতীয় কমান্ডগুলি সহজেই ফ্লাইয়ের স্ট্রিং হিসাবে তৈরি করা যায়।
যতটা সম্ভব বাহ্যিক ইউটিলিটিগুলির সাথে যথাসম্ভব ব্যাপকভাবে সামঞ্জস্য করা যায়, অস্থায়ী। ডিফল্টরূপে কোনও বিওএম (বাইট-অর্ডার চিহ্ন) ছাড়াই ফাইলটি ইউটিএফ -8 এনকোডিং ব্যবহার করা উচিত , যদিও আপনি প্রয়োজনের সাথে কোনও ইউটিএফ -8 বিওএম-র অনুরোধ করতে পারেন ।-BOM
দুর্ভাগ্যক্রমে, প্রক্রিয়া বিকল্পগুলির স্বয়ংক্রিয় ক্লিনআপ দিকটি সরাসরি অনুকরণ করা যায় না, সুতরাং একটি পরিষ্কার ক্লিনআপ কল প্রয়োজন ; cf
তর্ক ছাড়াই কল করে পরিষ্কার করা হয় :
জন্য ইন্টারেক্টিভ ব্যবহার করেন, আপনি করতে পারেন আপনার টু পরিষ্করণ কল যোগ করে পরিষ্করণ স্বয়ংক্রিয় prompt
নিম্নরূপ (ফাংশন prompt
ফাংশন প্রম্পট ফেরৎ স্ট্রিং , কিন্তু পর্দার পেছনের সম্পাদন করতে ব্যবহার করা যেতে পারে প্রত্যেক সময় প্রম্পট প্রদর্শিত হয়, ব্যাশ এর অনুরূপ কমান্ড $PROMPT_COMMAND
পরিবর্তনশীল); যে কোনও ইন্টারেক্টিভ সেশনে উপলব্ধতার জন্য, cf
আপনার পাওয়ারশেল প্রোফাইলে নীচের সংজ্ঞাটি যুক্ত করুন :
"function prompt { cf 4>`$null; $((get-item function:prompt).definition) }" |
Invoke-Expression
স্ক্রিপ্টগুলিতে ব্যবহারের জন্য, ক্লিনআপ সম্পন্ন হয়েছে তা নিশ্চিত করার জন্য, যে ব্লকটি ব্যবহার করে cf
- সম্ভাব্যভাবে পুরো স্ক্রিপ্টটি একটি try
/ finally
ব্লকে আবৃত করা দরকার , যেখানে cf
আর্গুমেন্ট ছাড়াই ক্লিনআপের জন্য ডাকা হয়:
# Example
try {
# Pass the output from `Get-ChildItem` via a temporary file.
findstr.exe "Windows" (cf { Get-ChildItem c:\ })
# cf() will reuse the existing temp. file for additional invocations.
# Invoking it without parameters will delete the temp. file.
} finally {
cf # Clean up the temp. file.
}
এখানে বাস্তবায়ন উন্নত ফাংশন: ConvertTo-TempFile
এবং তার সংক্ষিপ্ত ওরফে, cf
:
দ্রষ্টব্য : গতিশীল মডিউলেরNew-Module
মাধ্যমে ফাংশনটি সংজ্ঞায়িত করার জন্য PSv3 + এর ব্যবহারের ব্যবহারটি নিশ্চিত করে যে স্ক্রিপ্ট ব্লক পাসের মধ্যে উল্লেখ করা ফাংশন পরামিতি এবং ভেরিয়েবলের মধ্যে কোনও পরিবর্তনশীল দ্বন্দ্ব থাকতে পারে না।
$null = New-Module { # Load as dynamic module
# Define a succinct alias.
set-alias cf ConvertTo-TempFile
function ConvertTo-TempFile {
[CmdletBinding(DefaultParameterSetName='Cleanup')]
param(
[Parameter(ParameterSetName='Standard', Mandatory=$true, Position=0)]
[ScriptBlock] $ScriptBlock
, [Parameter(ParameterSetName='Standard', Position=1)]
[string] $LiteralPath
, [Parameter(ParameterSetName='Standard')]
[string] $Extension
, [Parameter(ParameterSetName='Standard')]
[switch] $BOM
)
$prevFilePath = Test-Path variable:__cttfFilePath
if ($PSCmdlet.ParameterSetName -eq 'Cleanup') {
if ($prevFilePath) {
Write-Verbose "Removing temp. file: $__cttfFilePath"
Remove-Item -ErrorAction SilentlyContinue $__cttfFilePath
Remove-Variable -Scope Script __cttfFilePath
} else {
Write-Verbose "Nothing to clean up."
}
} else { # script block specified
if ($Extension -and $Extension -notlike '.*') { $Extension = ".$Extension" }
if ($LiteralPath) {
# Since we'll be using a .NET framework classes directly,
# we must sync .NET's notion of the current dir. with PowerShell's.
[Environment]::CurrentDirectory = $pwd
if ([System.IO.Directory]::Exists($LiteralPath)) {
$script:__cttfFilePath = [IO.Path]::Combine($LiteralPath, [IO.Path]::GetRandomFileName() + $Extension)
Write-Verbose "Creating file with random name in specified folder: '$__cttfFilePath'."
} else { # presumptive path to a *file* specified
if (-not [System.IO.Directory]::Exists((Split-Path $LiteralPath))) {
Throw "Output folder '$(Split-Path $LiteralPath)' must exist."
}
$script:__cttfFilePath = $LiteralPath
Write-Verbose "Using explicitly specified file path: '$__cttfFilePath'."
}
} else { # Create temp. file in the user's temporary folder.
if (-not $prevFilePath) {
if ($Extension) {
$script:__cttfFilePath = [IO.Path]::Combine([IO.Path]::GetTempPath(), [IO.Path]::GetRandomFileName() + $Extension)
} else {
$script:__cttfFilePath = [IO.Path]::GetTempFilename()
}
Write-Verbose "Creating temp. file: $__cttfFilePath"
} else {
Write-Verbose "Reusing temp. file: $__cttfFilePath"
}
}
if (-not $BOM) { # UTF8 file *without* BOM
# Note: Out-File, sadly, doesn't support creating UTF8-encoded files
# *without a BOM*, so we must use the .NET framework.
# [IO.StreamWriter] by default writes UTF-8 files without a BOM.
$sw = New-Object IO.StreamWriter $__cttfFilePath
try {
. $ScriptBlock | Out-String -Stream | % { $sw.WriteLine($_) }
} finally { $sw.Close() }
} else { # UTF8 file *with* BOM
. $ScriptBlock | Out-File -Encoding utf8 $__cttfFilePath
}
return $__cttfFilePath
}
}
}
Outputচ্ছিকভাবে একটি আউটপুট [ফাইল] পাথ এবং / অথবা ফাইল নাম এক্সটেনশন নির্দিষ্ট করার ক্ষমতা নোট করুন।