অ্যাড-পিএসএসএনপিন কল করার আগে পাওয়ারশেল স্ন্যাপ-ইন ইতিমধ্যে লোড হয়েছে কিনা তা কীভাবে পরীক্ষা করবেন


90

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

এখনই প্রতিটি স্ক্রিপ্ট Add-PSSnapin XYZশুরুতে কল করছে।

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

উইন্ডোজ পাওয়ারশেল স্ন্যাপ-ইন এক্সওয়াইজেড যুক্ত করতে পারে না কারণ এটি অ্যালারেডি যুক্ত হয়েছে। স্ন্যাপ-এর নাম যাচাই করুন এবং আবার চেষ্টা করুন।

অ্যাড-পিএসএসএনপিন কল করার আগে স্ন্যাপ-ইন ইতিমধ্যে লোড হয়েছে কিনা তা দেখতে প্রতিটি স্ক্রিপ্ট চেক করব কীভাবে?

উত্তর:


133

আপনি স্নাপিনের জন্য জিজ্ঞাসা করেছেন তবে পাওয়ারশেলকে এটি খুঁজে না পাওয়া গেলে ত্রুটি থেকে বেরিয়ে না যেতে বলুন এমন কিছু দিয়ে আপনি এটি করতে সক্ষম হবেন:

if ( (Get-PSSnapin -Name MySnapin -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PsSnapin MySnapin
}

আহ-হা! এই ঠিক আমার প্রয়োজন, ধন্যবাদ! আমি আমার পরীক্ষায় এর সাথে অনুরূপ কিছু চেষ্টা করেছিলাম কিন্তু -অরার অ্যাকশন সাইলেন্টলি কনটিনিউ সম্পর্কে আমি জানতাম না।
joshuapoehls

4
সাইলেন্টলি কনটিনিউ কারণ গেট-পিএসএসএনপিন যখন ডিফল্টরূপে স্ন্যাপটি খুঁজে না পায় তখন নিঃশব্দে শূন্য হয় না। এটি ত্রুটিযুক্ত।
ধনী

4
অলসতার জন্য: এই নিবন্ধটি একটি পূর্ণ কোড উদাহরণ সরবরাহ করে যাতে কীভাবে লোড করার আগে একটি স্ন্যাপ-ইন নিবন্ধভুক্ত হয় তাও পরীক্ষা করতে হবে check
হার্জবিউব

21

স্কট ইতিমধ্যে আপনাকে উত্তর দিয়েছিল। আপনি এটিকে যেভাবেই লোড করতে এবং ত্রুটিটি এটি ইতিমধ্যে লোড করা থাকলে তা উপেক্ষা করতে পারেন:

Add-PSSnapin -Name <snapin> -ErrorAction SilentlyContinue

6
ইনস্টল না হওয়ার মতো অন্যান্য কারণে যদি স্ন্যাপটি লোড না করে তবে এটি নিঃশব্দে চালিয়ে যাবে। যা আপনার স্ক্রিপ্টটি ব্যবহার করে এমন লোকেদের জন্য সমস্যাগুলি নির্ণয় করতে অসুবিধার কারণ হতে পারে।
গ্রাহাম অ্যামব্রোজ

ঠিক আছে, সেক্ষেত্রে আমরা প্রথমে স্ন্যাপ-ইন নিবন্ধিত কিনা তা পরীক্ষা করে দেখতে পারি।
শ্যা লেভি

4

উদ্বিগ্নভাবে, স্ক্রিপ্টগুলির নির্ভরতা নির্দিষ্ট করার জন্য কেউ স্থানীয় উপায় উল্লেখ করেনি: #REQUIRES -PSSnapin Microsoft.PowerShell...মন্তব্য / প্রাকপ্রসেসর নির্দেশিকা। ঠিক একই রকমের সাথে আপনাকে উচ্চতা -RunAsAdministrator, মডিউলগুলি -Modules Module1,Module2এবং একটি নির্দিষ্ট রানস্পেস সংস্করণ প্রয়োজন হতে পারে ।

টাইপ করে আরও পড়ুন Get-Help about_requires


এই সমাধানটি আমার কাছে এটি করার "সঠিক" উপায় বলে মনে হচ্ছে।
Grax32

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

4
মডিউলগুলি আরও নতুন এবং এটি মডিউলগুলি যা প্রয়োজন অনুযায়ী স্বয়ংক্রিয়ভাবে লোড হয়, পিএসএসএনপিন নয়, আপনি ঠিক বলেছেন। তবে স্ন্যাপিন ছাড়াই স্ক্রিপ্টের অংশটি চালিয়ে কমপক্ষে কোনও কিছুই ভাঙ্গা বা ছেঁটে ফেলা যাবে না।
আলেক্সি

3

আমি @ স্কটসাদের কোড নমুনা চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কার্যকর হয়নি। আমি ঠিক খুঁজে পাইনি কেন তবে চেকটি অবিশ্বাস্য ছিল, কখনও কখনও সফল হয় এবং কখনও কখনও হয় না। আমি দেখেছি যে সম্পত্তিতে একটি Where-Objectফিল্টারিং ব্যবহার করে Nameআরও ভাল কাজ হয়েছে:

if ((Get-PSSnapin | ? { $_.Name -eq $SnapinName }) -eq $null) {
    Add-PSSnapin $SnapinName 
}

কোড সৌজন্যে এই


1

স্কট স্যাডস কাজ করে তবে এটি আমার কাছে কিছুটা দ্রুত বলে মনে হয়। আমি এটি পরিমাপ করি নি তবে এটি কখনও তত দ্রুত লোড হবে বলে মনে হয় কারণ এটি কখনই ত্রুটিযুক্ত সমস্যা তৈরি করে না।

$snapinAdded = Get-PSSnapin | Select-String $snapinName
if (!$snapinAdded)
{
    Add-PSSnapin $snapinName
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.