আমি কীভাবে পাওয়ারশেলের কোনও বহিরাগত প্রক্রিয়া থেকে আউটপুটটিকে পরিবর্তনশীল হিসাবে ক্যাপচার করব?


158

আমি একটি বাহ্যিক প্রক্রিয়া চালাতে চাইছি এবং এর কমান্ড আউটপুট পাওয়ারশেলের একটি পরিবর্তনশীলকে ক্যাপচার করব। আমি বর্তমানে এটি ব্যবহার করছি:

$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait

আমি নিশ্চিত করেছি যে কমান্ডটি কার্যকর হচ্ছে তবে আমার আউটপুটটি একটি ভেরিয়েবলের মধ্যে ক্যাপচার করা দরকার। এর অর্থ আমি -রেক্টর-আউটপুট ব্যবহার করতে পারি না কারণ এটি কেবল একটি ফাইলে পুনঃনির্দেশ করে।


3
প্রথম এবং সর্বাগ্রে: বাহ্যিক সংজ্ঞাটি (বাহ্যিক সংজ্ঞায়িতভাবে) কনসোল অ্যাপ্লিকেশনগুলি সিঙ্ক্রোনিকভাবে কার্যকর করতে ব্যবহার করবেন না Start-Process- কেবল তাদেরকে সরাসরি অনুরোধ করুন , কোনও শেলের মতো; বুদ্ধি হবে: netdom /verify $pc /domain:hosp.uhhg.org। এটি করার ফলে অ্যাপ্লিকেশনটি কলিং কনসোলের স্ট্যান্ডার্ড স্ট্রিমের সাথে সংযুক্ত রাখে, এর আউটপুটটিকে সাধারণ অ্যাসাইনমেন্ট দ্বারা ক্যাপচার করার অনুমতি দেয় $output = netdom ...। নীচে প্রদত্ত বেশিরভাগ উত্তর Start-Processপ্রত্যক্ষভাবে মৃত্যুদন্ড কার্যকর করার পক্ষে চলে যায়।
mklement0

@ এমকেলেটমেন্ট 0 ব্যতীত যদি কেউ -Credentialপ্যারামিটারটি ব্যবহার করতে চায়
সিজেবিএস

@ সিজেবিএস হ্যাঁ, একটি পৃথক ব্যবহারকারীর পরিচয় দিয়ে চালানোর জন্য , ব্যবহার Start-Processকরা আবশ্যক - তবে কেবলমাত্র (এবং আপনি যদি আলাদা উইন্ডোতে কোনও কমান্ড চালাতে চান)। আর যে ক্ষেত্রে অনিবার্য সীমাবদ্ধতা সচেতন হওয়া উচিত: কোন ক্যাপচার আউটপুট করার ক্ষমতা, ছাড়া - অ ইন্টারলিভড্ - টেক্সট মধ্যে ফাইল মাধ্যমে -RedirectStandardOutputএবং -RedirectStandardError
mklement0

উত্তর:


161

আপনি চেষ্টা করেছেন:

$OutputVariable = (Shell command) | Out-String


আমি এটি "=" ব্যবহার করে এটি একটি ভেরিয়েবলের কাছে বরাদ্দ দেওয়ার চেষ্টা করেছি তবে আমি প্রথমে আউট-স্ট্রিংয়ের আউটপুট পাইপ করার চেষ্টা করিনি। আমি চেষ্টা করে দেব।
অ্যাডাম বার্ট্রাম

10
এখানে কী ঘটছে তা আমি বুঝতে পারি না এবং এটি কাজ করতে পারি না। "শেল" একটি পাওয়ারশেল কীওয়ার্ড? সুতরাং আমরা আসলে স্টার্ট-প্রসেসের সিএমডিলেট ব্যবহার করি না? আপনি কি দয়া করে একটি নিবিড় উদাহরণ দিতে পারেন (উদাহরণস্বরূপ "শেল" এবং / অথবা "কমান্ড" একটি বাস্তব উদাহরণ দিয়ে প্রতিস্থাপন করুন)।
মারাত্মক ডগ

@deadlydog Shell Commandআপনি যা চালাতে চান তা দিয়ে প্রতিস্থাপন করুন । এটা খুব সহজ।
জেএনকে

1
@ স্টেজ, ঠিক বলেছেন। আমি প্রধানত স্পষ্ট করে বলছিলাম যে আপনার মন্তব্যে থাকা কোডটির উত্তরের কোডের সাথে আলাদা কার্যকারিতা রয়েছে। আমার মতো শিক্ষানবিশরা এগুলির মতো আচরণের সূক্ষ্ম পার্থক্যের মাধ্যমে ফেলে দিতে পারেন!
স্যাম

1
@ অ্যাটিক আমি একই ইস্যুতে দৌড়েছি। দেখা যাচ্ছে যে ffmpeg মাঝে মাঝে stdout এর পরিবর্তে stderr এ লিখবে যদি উদাহরণস্বরূপ, আপনি -iএকটি আউটপুট ফাইল নির্দিষ্ট না করে বিকল্পটি ব্যবহার করেন । 2>&1অন্যান্য উত্তরগুলির মধ্যে বর্ণিত হিসাবে আউটপুট পুনর্নির্দেশ করা হ'ল সমাধান।
jmbpiano

159

দ্রষ্টব্য: প্রশ্নের কমান্ডটি ব্যবহার করে Start-Process, যা লক্ষ্য প্রোগ্রামের আউটপুট সরাসরি ক্যাপচারিং বাধা দেয়। সাধারণত, কনসোল অ্যাপ্লিকেশনগুলি সিঙ্ক্রোনালি কার্যকর করতে ব্যবহার করবেন না Start-Process- কেবল কোনও শেলের মতোই সরাসরি তাদের অনুরোধ করুন । এটি করার ফলে অ্যাপ্লিকেশনটি কলিং কনসোলের স্ট্যান্ডার্ড স্ট্রিমের সাথে সংযুক্ত রাখে, এর আউটপুটটিকে সাধারণ অ্যাসাইনমেন্ট দ্বারা ক্যাপচার করা যায় $output = netdom ..., নীচে বিস্তারিত হিসাবে।

মৌলিকভাবে , বাহ্যিক ইউটিলিটিগুলি থেকে আউটপুট ক্যাপচার পাওয়ারশেল-নেটিভ কমান্ডগুলির সাথে একইভাবে কাজ করে (আপনি কীভাবে বাহ্যিক সরঞ্জামগুলি কার্যকর করতে পারেন তার জন্য একটি রিফ্রেশার চাইতে পারেন ):

$cmdOutput = <command>   # captures the command's success stream / stdout

নোট করুন যে 1 টির বেশি আউটপুট অবজেক্ট তৈরি করলে অবজেক্টগুলির $cmdOutputএকটি অ্যারে প্রাপ্ত হয় , যা বাহ্যিক প্রোগ্রামের ক্ষেত্রে প্রোগ্রামের আউটপুট লাইনগুলি যুক্ত স্ট্রিং অ্যারের অর্থ । আপনি যদি সর্বদা একটি একক - সম্ভাব্য বহু-লাইন - স্ট্রিং পেতে চান তবে ব্যবহার করুন<command>
$cmdOutput
$cmdOutput = <command> | Out-String


করার ক্যাপচার একটি পরিবর্তনশীল ফলাফল এবং পর্দা মুদ্রণ :

<command> | Tee-Object -Variable cmdOutput # Note how the var name is NOT $-prefixed

বা, যদি <command>একটি সেমিডলেট বা উন্নত ফাংশন হয় তবে আপনি সাধারণ পরামিতি
-OutVariable/-ov
:

<command> -OutVariable cmdOutput   # cmdlets and advanced functions only

উল্লেখ্য যে -OutVariable, অসদৃশ অন্যান্য পরিস্থিতিতে, $cmdOutputহয় সবসময় একটি সংগ্রহ , এমনকি যদি শুধুমাত্র এক বস্তু আউটপুট। বিশেষত, অ্যারের মতো [System.Collections.ArrayList]ধরণের একটি উদাহরণ ফিরে আসে। এই তাত্ক্ষণিকতার আলোচনার জন্য এই গিটহাব ইস্যুটি
দেখুন ।


একাধিক কমান্ড থেকে আউটপুট ক্যাপচার করতে , হয় একটি subexpression ( $(...)) ব্যবহার করুন বা স্ক্রিপ্ট ব্লক কল করুন ( { ... }) এর সাথে &বা .:

$cmdOutput = $(<command>; ...)  # subexpression

$cmdOutput = & {<command>; ...} # script block with & - creates child scope for vars.

$cmdOutput = . {<command>; ...} # script block with . - no child scope

নোট করুন যে সাধারণকে &(কল অপারেটর) একটি পৃথক কমান্ড যার নাম / পাথ উদ্ধৃত হয় - যেমন $cmdOutput = & 'netdom.exe' ...- প্রতি সে বাইরের প্রোগ্রামের সাথে সম্পর্কিত নয় (এটি পাওয়ারশেল স্ক্রিপ্টগুলিতে সমানভাবে প্রযোজ্য ) এর সাথে প্রিফিক্স করা দরকার , তবে এটি একটি সিনট্যাক্স প্রয়োজনীয়তা : পাওয়ারশেল ডিফল্টরূপে এক্সপ্রেশন মোডে একটি উদ্ধৃত স্ট্রিং দিয়ে শুরু হওয়া একটি বিবৃতিকে বিশ্লেষণ করে, যেখানে কমান্ডগুলি (সেমিডলেটস, বহিরাগত প্রোগ্রামগুলি, ফাংশনগুলি, উপাধিগুলি) শুরু করার জন্য আর্গুমেন্ট মোডের প্রয়োজন হয়, যা &নিশ্চিত করে।

$(...)এবং & { ... }/ এর মধ্যে মূল পার্থক্যটি . { ... }হ'ল প্রাক্তন পুরোপুরি ফিরে আসার আগে মেমরির সমস্ত ইনপুট সংগ্রহ করে , যেখানে পরেরটি আউটপুট প্রবাহিত করে, একের পর এক পাইপলাইন প্রসেসিংয়ের জন্য উপযুক্ত।


পুনঃনির্দেশগুলি একইভাবে কাজ করে, মূলত (তবে নীচে সতর্কীকরণগুলি দেখুন):

$cmdOutput = <command> 2>&1 # redirect error stream (2) to success stream (1)

তবে বাহ্যিক আদেশের জন্য নিম্নলিখিতটি প্রত্যাশার মতো কাজ করার সম্ভাবনা বেশি রয়েছে:

$cmdOutput = cmd /c <command> '2>&1' # Let cmd.exe handle redirection - see below.

বাহ্যিক প্রোগ্রামগুলির জন্য নির্দিষ্ট বিবেচনাগুলি :

  • বাহ্যিক প্রোগ্রামগুলি , কারণ তারা পাওয়ারশেলের ধরণের সিস্টেমের বাইরে কাজ করে, কেবল তাদের সাফল্যের স্ট্রিম (স্টাডআউট) এর মাধ্যমে কেবল স্ট্রিং ফেরত দেয়।

  • যদি আউটপুটটিতে 1 টির বেশি লাইন থাকে তবে পাওয়ারশেল ডিফল্টরূপে এটি স্ট্রিংগুলির একটি অ্যারেতে বিভক্ত হয় । আরও সঠিকভাবে, আউটপুট লাইনগুলি এমন ধরণের অ্যারেতে সংরক্ষণ করা হয় [System.Object[]]যার উপাদানগুলি স্ট্রিং ( [System.String])।

  • আপনি যদি আউটপুট একটি হতে চান একক , সম্ভাব্য বহু-লাইন স্ট্রিং , নল থেকেOut-String :
    $cmdOutput = <command> | Out-String

  • স্টাডারকে স্টাডাউটে পুনর্নির্দেশ করা2>&1 , যাতে এটি সাফল্যের স্রোতের অংশ হিসাবে ক্যাপচার করে, সতর্কতার সাথে আসে :

    • করতে 2>&1একত্রীকরণ stdout- এ এবং দ্বারা stderr উৎস , দিন cmd.exeফেরৎ হ্যান্ডেল , নিম্নলিখিত বাগধারার ব্যবহার করছে:
      $cmdOutput = cmd /c <command> '2>&1' # *array* of strings (typically)
      $cmdOutput = cmd /c <command> '2>&1' | Out-String # single string

      • cmd /ccmd.exeকমান্ডের সাথে প্রার্থনা করে <command>এবং <command>সমাপ্ত হওয়ার পরে প্রস্থান করে ।
      • আশেপাশের একক উক্তিগুলি নোট করুন 2>&1, এটি নিশ্চিত করে যে পুনর্নির্দেশটি cmd.exeপাওয়ারশেলের দ্বারা ব্যাখ্যা না করে পরিবর্তিত হয়ে গেছে ।
      • নোট করুন যে জড়িত থাকার cmd.exeঅর্থ পাওয়ারশেলের নিজস্ব প্রয়োজনীয়তা ছাড়াও ডিফল্টরূপে অক্ষরগুলি থেকে বাঁচার এবং পরিবেশের ভেরিয়েবলগুলি প্রসারিত করার জন্য তার নিয়মগুলি কার্যকর হয়; PS v3 + তে আপনি স্টোর পরিবেশ-পরিবর্তনশীল উল্লেখগুলি ব্যতীত পাওয়ারশেলের দ্বারা বাকী পরামিতিগুলির ব্যাখ্যা বন্ধ করতে বিশেষ প্যারামিটার --%(তথাকথিত স্টপ পার্সিং প্রতীক ) ব্যবহার করতে পারেন ।cmd.exe%PATH%

      • নোট করুন যেহেতু আপনি এই পদ্ধতির সাহায্যে উত্স এবং স্ট্ডারকে মার্জ করছেন , আপনি পাওয়ারশেলের স্টাডাউট-উত্পন্ন এবং স্ট্যাডার-উদ্ভূত লাইনের মধ্যে পার্থক্য করতে সক্ষম হবেন না ; আপনার যদি এই পার্থক্যটির প্রয়োজন হয় তবে পাওয়ারশেলের নিজস্ব 2>&1পুনঃনির্দেশ ব্যবহার করুন - নীচে দেখুন।

    • কোন স্ট্রিম থেকে কোন রেখাগুলি এসেছে তা জানতে পাওয়ারশেলের 2>&1 পুনঃনির্দেশ ব্যবহার করুন :

      • Stderr আউটপুট বন্দী করা হয় ত্রুটি রেকর্ড ( [System.Management.Automation.ErrorRecord],), না স্ট্রিং তাই আউটপুট অ্যারে একটি থাকতে পারে মিশ্রণ এর স্ট্রিং (প্রতিটি স্ট্রিং একটি stdout- এ লাইন প্রতিনিধিত্বমূলক) এবং ত্রুটি রেকর্ড (প্রতিটি রেকর্ড একটি দ্বারা stderr লাইন প্রতীক) । নোট করুন, অনুরোধ অনুসারে 2>&1, স্ট্রিং এবং ত্রুটি রেকর্ড উভয়ই পাওয়ারশেলের সাফল্যের আউটপুট স্ট্রিমের মাধ্যমে প্রাপ্ত হয়েছে )।

      • কনসোলে, ত্রুটিটি লাল রঙে মুদ্রণ করে এবং 1 ম ডিফল্টরূপে বহু-লাইন প্রদর্শন উত্পন্ন করে , একই ফর্ম্যাটে একটি সেমিডলেটের অ-সমাপনী ত্রুটি প্রদর্শিত হবে; পরবর্তী ত্রুটি রেকর্ডগুলি লাল হিসাবেও প্রিন্ট করে তবে কেবল তাদের ত্রুটি বার্তাটি একটি লাইনে মুদ্রণ করে ।

      • কনসোলে আউটপুট দেওয়ার সময় , স্ট্রিংগুলি সাধারণত আউটপুট অ্যারেতে প্রথমে আসে ত্রুটি রেকর্ডের পরে (কমপক্ষে stdout / stderr লাইন আউটপুট "একই সময়ে" একটি ব্যাচের মধ্যে)) তবে, ভাগ্যক্রমে, আপনি আউটপুট ক্যাপচার করার সময় , এটি সঠিকভাবে ইন্টারলিভড , একই আউটপুট ক্রমটি ব্যবহার করে আপনি ছাড়া পাবেন 2>&1; অন্য কথায়: কনসোলে আউটপুট দেওয়ার সময় , আটকানো আউটপুট বাহ্যিক কমান্ড দ্বারা স্টডআউট এবং স্টার্ডার লাইনগুলি ক্রম প্রতিপন্ন করে না।

      • আপনি যদি একটি সমগ্র আউটপুট গ্রহণ করে একক সঙ্গে স্ট্রিংOut-String , PowerShell যোগ হবে অতিরিক্ত লাইন , কারণ একটি ত্রুটি রেকর্ডের স্ট্রিং উপস্থাপনা যেমন অবস্থান (যেমন অতিরিক্ত তথ্য উপস্থিত রয়েছে At line:...) এবং বিভাগ ( + CategoryInfo ...); কৌতূহলীভাবে, এটি কেবল প্রথম ত্রুটি রেকর্ডে প্রযোজ্য ।

        • এই সমস্যা এড়াতে কাজ করতে আবেদন .ToString()পরিবর্তে বংশীধ্বনিতুল্য এর প্রতিটি আউটপুট বস্তু পদ্ধতি Out-String:
          $cmdOutput = <command> 2>&1 | % { $_.ToString() };
          PS v3 + এ আপনি সহজ করতে পারেন:
          $cmdOutput = <command> 2>&1 | % ToString
          (বোনাস হিসাবে, যদি আউটপুট ক্যাপচার না করা হয় তবে এটি কনসোলে প্রিন্ট করার সময়ও সঠিকভাবে আন্তঃভিত্তিক আউটপুট উত্পাদন করে))
      • বিকল্পভাবে, ত্রুটি রেকর্ড আউট ফিল্টার এবংWrite-Error এটিকে পাওয়ারশেলের ত্রুটি প্রবাহে প্রেরণ করুন (বোনাস হিসাবে, যদি আউটপুট ক্যাপচার না করা হয়, এটি কনসোলে প্রিন্ট করার সময়ও সঠিকভাবে আন্তঃভিত্তিক আউটপুট উত্পাদন করে):

$cmdOutput = <command> 2>&1 | ForEach-Object {
  if ($_ -is [System.Management.Automation.ErrorRecord]) {
    Write-Error $_
  } else {
    $_
  }
}

আমি শেষ পর্যন্ত আমার কার্যকর কার্যকর পথ এবং এর জন্য আমার যুক্তি গ্রহণ করার পরে, এটি আমার পক্ষে কাজ করেছিল, তাদেরকে একটি স্ট্রিংয়ে ফেলেছিল এবং এটিকে আমার <কম্যান্ড> হিসাবে বিবেচনা করেছে।
ড্যান

2
@ ড্যান: যখন পাওয়ারশেল নিজেই ব্যাখ্যা করে <command>, আপনাকে অবশ্যই কার্যকর করতে সক্ষম এবং এর যুক্তিগুলিকে একক স্ট্রিংয়ে একত্রিত করতে পারবেন না ; অনুরোধের মাধ্যমে cmd /cআপনি এটি করতে পারেন, এবং এটি পরিস্থিতিটি বোঝায় বা না তা নির্ভর করে। আপনি কোন দৃশ্যের উল্লেখ করছেন, এবং আপনি একটি ন্যূনতম উদাহরণ দিতে পারেন?
mklement0

কাজ করে: $ কমান্ড = "সি: \ mycommand.exe" + gs আরোগস ..... $ আউটপুট = সেমি / সি $ কমান্ড '2> & 1'
ড্যান

1
@ ড্যান: হ্যাঁ, এটি কাজ করে, যদিও আপনাকে +অপারেটরের সাথে স্ট্রিংয়ের মধ্যবর্তী পরিবর্তনশীল এবং সুস্পষ্ট নির্মাণের প্রয়োজন হবে না ; নিম্নলিখিতটিও কাজ করে: cmd /c c:\mycommand.exe $Args '2>&1'- পাওয়ারশেল $Argsসেই ক্ষেত্রে একটি স্পেস-বিভাজিত স্ট্রিং হিসাবে স্প্ল্যাটিং নামে পরিচিত একটি উপাদান হিসাবে উপাদানগুলিকে পাস করার যত্ন নেয় ।
mklement0

অবশেষে একটি যথাযথ উত্তর যা PS6.1 + এ কাজ করে। সস এর গোপনীয়তা আসলে '2>&1'অংশ, এবং ()অনেক স্ক্রিপ্ট করতে ঝাঁকুনি না।
not2qubit

24

আপনি যদি ত্রুটি আউটপুটটিকেও পুনর্নির্দেশ করতে চান তবে আপনাকে করতে হবে:

$cmdOutput = command 2>&1

বা, যদি প্রোগ্রামের নামটিতে জায়গা থাকে:

$cmdOutput = & "command with spaces" 2>&1

4
2> এবং 1 এর অর্থ কী? রান কমান্ডকে 2 বলা হয় এবং তার আউটপুটটি রান কমান্ডে 1 বলে?
রিচার্ড

7
এর অর্থ "যেখানে স্ট্যান্ডার্ড আউটপুট (ফাইল বর্ণনাকারী 1) চলছে সেখানে স্ট্যান্ডার্ড ত্রুটি আউটপুট (ফাইল বর্ণনাকারী 2) একই জায়গায় পুনর্নির্দেশ করুন"। মূলত, স্বাভাবিক এবং ত্রুটি বার্তাগুলি একই জায়গায় পুনঃনির্দেশ করে (এক্ষেত্রে কনসোল, যদি স্টাডআউট অন্য কোথাও পুনঃনির্দেশ না করা হয় - যেমন একটি ফাইল)।
জিওভান্নি তিরলনি

11

অথবা এই চেষ্টা করুন। এটি আউটপুটটিকে ভেরিয়েবল $ স্ক্রিপ্ট আউটপুট-তে ক্যাপচার করবে

& "netdom.exe" $params | Tee-Object -Variable scriptOutput | Out-Null

$scriptOutput

7
-1, অহেতুক জটিল। $scriptOutput = & "netdom.exe" $params
চার্লসবি

8
আউট-নাল অপসারণ এবং এটি একই সাথে উভয় শেল এবং একটি ভেরিয়েবলের জন্য পাইপিংয়ের জন্য দুর্দান্ত।
ফেরেন্টকোডার

10

আর একটি বাস্তব জীবনের উদাহরণ:

$result = & "$env:cust_tls_store\Tools\WDK\x64\devcon.exe" enable $strHwid 2>&1 | Out-String

লক্ষ্য করুন যে এই উদাহরণে একটি পথ রয়েছে (যা পরিবেশের পরিবর্তনশীল দিয়ে শুরু হয়)। লক্ষ্য করুন যে উদ্ধৃতিগুলি অবশ্যই পথ এবং EXE ফাইলটিকে ঘিরে রয়েছে, তবে প্যারামিটারগুলি নয়!

দ্রষ্টব্য:& কমান্ডের সামনে অক্ষরটি ভুলে যাবেন না , তবে উদ্ধৃতিগুলির বাইরে।

ত্রুটি আউটপুটও সংগ্রহ করা হয়।

এই সমন্বয়টি কাজ করতে আমার কিছুটা সময় লেগেছে, তাই আমি ভেবেছিলাম যে আমি এটি ভাগ করব।


8

আমি উত্তরগুলি চেষ্টা করেছিলাম, তবে আমার ক্ষেত্রে আমি কাঁচা আউটপুট পাইনি। পরিবর্তে এটি পাওয়ারশেল ব্যতিক্রমে রূপান্তরিত হয়েছিল।

কাঁচা ফলাফল আমি পেয়েছি:

$rawOutput = (cmd /c <command> 2`>`&1)

2

আমি কাজ করার জন্য নিম্নলিখিত পেয়েছি:

$Command1="C:\\ProgramData\Amazon\Tools\ebsnvme-id.exe"
$result = & invoke-Expression $Command1 | Out-String

$ ফলাফল আপনাকে প্রয়োজনীয় দেয়



0

আপনি যা করতে চেষ্টা করছেন তা যদি কোনও আদেশ থেকে আউটপুট ক্যাপচার করা হয় তবে এটি ভালভাবে কাজ করবে।

সিস্টেমের সময় পরিবর্তন করার জন্য আমি এটি ব্যবহার করি, আপনার সিস্টেমে পরিবর্তন করার পরেও[timezoneinfo]::local সর্বদা একই তথ্য উত্পন্ন করে information টাইম জোনে পরিবর্তনটি আমি বৈধতা ও লগ করতে পারি এই একমাত্র উপায়:

$NewTime = (powershell.exe -command [timezoneinfo]::local)
$NewTime | Tee-Object -FilePath $strLFpath\$strLFName -Append

মানে সিস্টেম ভেরিয়েবলগুলি পুনরায় লোড করার জন্য আমাকে একটি নতুন পাওয়ারশেল সেশন খুলতে হবে ।

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