এসসিসিএম গ্লোবাল কন্ডিশন ডাব্লুকিউএল কোয়েরি টাইপ মিসর্ম্যাচ (wbemErrTypeMismatch - 0x80041005)


8

আমরা সংগ্রহগুলি সহ প্যাকেজগুলির (এবং এখন অ্যাপ্লিকেশনগুলি) জন্য আমাদের লক্ষ্যবস্তু যুক্তির সমস্ত পরিচালনা করছি। এখন যেহেতু আমরা এসসিসিএম 2007 থেকে এসসিসিএম 2012 এসপি 1 তে চলে এসেছি আমাদের সুপারিশ করা হয়েছিল যে আমরা সেই যুক্তিকে অ্যাপ্লিকেশন-প্রোগ্রামের মডেলটিতে স্থানান্তরিত করব এবং গ্লোবাল শর্তাদি এবং প্রয়োজনীয়তা ব্যবহার করে এটি প্রয়োগ করব। এর বেশ কয়েকটি ইতিবাচক সুবিধা রয়েছে - সংগ্রহগুলি নিখরচায়ভাবে শ্রেণিবদ্ধ বা যৌক্তিক গোষ্ঠীকরণের জন্য ব্যবহৃত হয়, সুপারসিডেন্স ব্যবহার করার সময় আমরা আরও একটি বিরামবিহীন অ্যাপ্লিকেশন ডিপ্লোয়মেন্ট পাই এবং উন্নত সনাক্তকরণ যুক্তি পাই।

আমি উদাহরণ হিসাবে অ্যাডোব ফ্ল্যাশ প্লেয়ার প্লাগইন ব্যবহার করব। আমরা কেবল ফায়ারফক্স ইনস্টল থাকা ওয়ার্কস্টেশনে অ্যাডোব ফ্ল্যাশ প্লেয়ার প্লাগইন স্থাপন করতে চাই। এসসিসিএম 2007 প্যাকেজ-প্রোগ্রাম মডেল ব্যবহার করে আমরা একটি ডাব্লুকিউএল কোয়েরির উপর ভিত্তি করে একটি সংগ্রহ তৈরি করব যা ফায়ারফক্সের সাথে সমস্ত ওয়ার্কস্টেশন ইনস্টল করে:

select *  from  SMS_R_System inner join SMS_G_System_SoftwareProduct
on SMS_G_System_SoftwareProduct.ResourceId = SMS_R_System.ResourceId
where SMS_G_System_SoftwareProduct.ProductName like "Mozilla Firefox"

একবার আমাদের সংগ্রহ তৈরি হয়ে গেলে আমরা এর পরে আমাদের প্যাকেজ-প্রোগ্রাম স্থাপন করব। আমি অ্যাপ্লিকেশন-প্রোগ্রামের গ্লোবাল কন্ডিশন এবং প্রয়োজনীয়তা যুক্তি ব্যবহার করে একই যুক্তিকে প্রতিলিপি দেওয়ার চেষ্টা করছি। আমার ডাব্লুকিউএল কোয়েরি ভিত্তিক গ্লোবাল কন্ডিশন তৈরির সমস্ত প্রচেষ্টা একটি ওয়েবেআরআরটাইপমিসম্যাচ ত্রুটি ( 2147749893 (0x80041005)) এর ফলস্বরূপ ।



এখন যে সেরা অনুশীলনগুলি সুপারিশ করে যে আমরা আমাদের টার্গেটিং লজিক অ্যাপ্লিকেশনটির সাথে বান্ডিল রেখেছি যা করা দরকার তা হল একটি উপযুক্ত ডাব্লুএইচকিউ কোয়েরি গ্লোবাল কন্ডিশন তৈরি করা এবং তারপরে আমরা অ্যাপ্লিকেশনটির প্রয়োজনীয়তাগুলি ব্যবহার করে এটি মূল্যায়ন করতে পারি।

আসুন ডাব্লুকিউএল কোয়েরি দিয়ে শুরু করি। আমি স্ক্রিপ্টটোমেটিককে ডাব্লুএমআই SMS_InstalledSoftwareক্লাসের সমস্ত কিছু ডাম্প করার জন্য ব্যবহার করেছি যা নামের জায়গার অংশ root\cimv2\sms। আমি যুক্তিসঙ্গতভাবে নিশ্চিত যে উইন 32_প্রডাক্ট কেবল উইন্ডোজ ইনস্টলার ইনস্টলড সফ্টওয়্যার এর জন্য কোনও কিছু ইনস্টল করা আছে কি না তা মূল্যায়ন করার চেষ্টা করার সময় এসএমএস_ইনস্টলডসফটওয়্যার বিরুদ্ধে প্রশ্ন চালানোর সেরা জায়গা।

আমি নিম্নলিখিত ফায়ারফক্স সম্পর্কিত বস্তুটি পাই:

ARPDisplayName: Mozilla Firefox 23.0.1 (x86 en-US)
ChannelCode: 
ChannelID: 
CM_DSLID: 
EvidenceSource: CPXCCCCCCXCXCXCXXXXXCXXXXX

InstallDirectoryValidation: 4
InstalledLocation: C:\Program Files (x86)\Mozilla Firefox
InstallSource: 
InstallType: 0
Language: 0
LocalPackage: 
MPC: 
OsComponent: 0
PackageCode: 
ProductID: 
ProductName: Mozilla Firefox 23.0.1 (x86 en-US)
ProductVersion: 23.0.1
Publisher: Mozilla
RegisteredUser: 
ServicePack: 
SoftwareCode: mozilla firefox 23.0.1 (x86 en-us)
SoftwarePropertiesHash: 63896ed23146ec91dbc763b45c127ba31216e2f9d657a87953440d30b7f306bc
SoftwarePropertiesHashEx: 67c2ecc42f0e0b9da6ee55bc0dea67a4d90b9e8452c9fdb25db57d4891698f25
UninstallString: "C:\Program Files (x86)\Mozilla Firefox\uninstall\helper.exe"
UpgradeCode: 
VersionMajor: 2147483647
VersionMinor: 2147483647



প্রোডাক্টনাম সম্পত্তিটির বিরুদ্ধে ডাব্লুকিউএল চালানো ভাল উপায় বলে মনে হচ্ছে। যদি আমি চালানোর SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'মধ্যে wbemtestবিরুদ্ধে root\cimv2\smsনামস্থান আমি নিম্নলিখিত পাবেন:

সবচেয়ে ভাল ফলাফল



আসুন পরের এসসিসিএমে গ্লোবাল কন্ডিশন তৈরির চেষ্টা করুন:

গ্লোবাল কন্ডিশন কোয়েরি



এটি সম্পূর্ণ অপ্রয়োজনীয় তবে আমি মনে করি এটি সঠিকভাবে বুঝতে পেরেছি। গ্লোবাল কন্ডিশনগুলি পুরো অ্যাপ্লিকেশন-প্রোগ্রাম যুক্তির শর্তযুক্ত অংশটি সেট করে যা কোনও মূল্যায়নমূলক অ্যাপ্লিকেশন-প্রোগ্রাম যুক্তিকে নয়। যে কারণে, আমি যেখানে যেখানে দফায় কিছু করছি না। এই গ্লোবাল শর্তটি বর্গের root\cimv2\smsনামস্থানে সন্ধান করা উচিত এবং পণ্য নাম SMS_InstalledSoftwareসম্পত্তিটি "ফিরিয়ে দিন"। আমার এখন আমার অ্যাপ্লিকেশনগুলির স্থাপনার ধরণের প্রয়োজনীয়তার সাথে সেই সম্পত্তির মূল্য / মূল্যায়ন করতে সক্ষম হব, তাই না?

এসসিসিএম প্রয়োজনীয়তা



আবার - আমি পুরো গ্লোবাল কন্ডিশন / প্রয়োজনীয়তা যুক্তিগুলি কীভাবে একসাথে স্তব্ধ হয়ে গেছে তা বুঝতে পারছি না বা এটি কেবল এই অপ্রতিদ্বন্দ্বী তবে উপরের আবশ্যকতাটি ProductNameসম্পত্তি থেকে ফিরে আসা সমস্ত স্ট্রিংগুলি দেখতে সক্ষম হবে , তাদের মধ্যে কোনও ফায়ারফক্স রয়েছে কিনা তা মূল্যায়ন করুন 'এবং যদি এত আনন্দের সাথে অ্যাডোব ফ্ল্যাশ প্লেয়ার প্লাগইন মোতায়েন করুন।

দুর্ভাগ্যক্রমে এটি কাজ করে না। মোতায়েনের প্রায় সমস্ত মেশিন নিম্নলিখিত ত্রুটিটি ফিরিয়ে দেয়:

2147749893 (0x80041005) Type Mismatch

আমি এটি বোঝাতে চাই যে গ্লোবাল কন্ডিশন আমার প্রয়োজনীয়তার চেয়ে মূল্যায়নের চেয়ে বিভিন্ন ধরণের পরিবর্তনশীল ফিরিয়ে দিচ্ছে তবে কীভাবে এখান থেকে সমস্যা সমাধান করবেন তা আমার কোনও ধারণা নেই। আমি আমার গ্লোবাল কন্ডিশনের প্রকারটি বুলিয়ানে সেট করার চেষ্টা করেছি এবং WHERE ধারা ( Name like '%Firefox%') সেট করার চেষ্টা করেছি তবে এতে একই ত্রুটি পাওয়া যায়।

অ্যাপ্লিকেশন-প্রোগ্রামের গ্লোবাল কন্ডিশন / প্রয়োজনীয়তা লক্ষ্যবস্তু যুক্তি ব্যবহার করে কীভাবে আমি আমার ডাব্লুএইচকিউএল ক্যোয়ারি-ভিত্তিক সংগ্রহটি প্রতিলিপি করতে পারি? আমি এখানে কী অনুপস্থিত (অপট-গেট ব্যতীত)?

উত্তর:


1

গ্লোবাল কন্ডিশন ডায়ালগটি সম্ভবত আমি এখনও অবধি দেখেছি এসসিসিএমের সর্বাধিক অপ্রয়োজনীয় অংশ।

একবার চেষ্টা করে দেখুন:

  1. আপনার ফায়ারফক্স 2 গ্লোবাল কন্ডিশনটি একইভাবে পুনরায় তৈরি করুন, তবে এবার ডাব্লুকিউএল কোয়েরিতে যেখানে ক্লোজ ক্ষেত্রটি নীচে রয়েছে সেখানে লিখুন: ProductName like "%Firefox%"

  2. আপনার অ্যাপ্লিকেশনটির স্থাপনার প্রকারের প্রয়োজনীয়তা ট্যাবে, ফায়ারফক্স 2 গ্লোবাল কন্ডিশনটি ব্যবহার করুন, তবে নিয়মের ধরনটিকে অস্তিত্বের মধ্যে পরিবর্তন করুন


0

এটি দক্ষ অনুমানযোগ্য, কারণ এটি পরীক্ষা করার আমার কাছে কোনও উপায় নেই, হাতছাড়া

যেহেতু ডাব্লুকিউএলএর কোনও নেটিভ কন্টেন্ট অপারেটর নেই, আমি বিশ্বাস করি যে Containsঅপারেটরটিকে পাওয়ারশেলের মতোই আচরণ করা হবে:

$referenceCollection -Contains $testValue

যদি এই তত্ত্বটি সঠিক হয় তবে আপনার অন্তর্নিহিত প্রয়োজনীয়তা যুক্তিটি এখানে প্রসারিত হবে:

"Microsoft Firefox 23 (en-us)" -Contains "firefox"

যদি বাম-হাতের ক্রিয়াকলাপটি -Containsকোনও সংগ্রহ না হয় তবে পরীক্ষার মান হিসাবে একই ধরণের একক উদাহরণ (যেমন আপনার উদাহরণ হিসাবে, দুটি স্ট্রিং) -Containsঠিক তেমন আচরণ করা হয় -eq

অতএব, "Microsoft Firefox 23 (en-us)" -Contains "firefox"সর্বদা মিথ্যা ফিরে আসবে।


0

আমি ব্যক্তিগতভাবে ডাব্লুএকিউএল কোয়েরির চেয়ে পাওয়ারশেল স্ক্রিপ্টটি ব্যবহার করব। আমার পাওয়ারশেল আপনি যে ডাব্লুএইচএল করছেন ঠিক তেমনই কাজ করবে (এমনকি একই ডাব্লুএমআই ক্লাস জিজ্ঞাসা করছে) তবে এটি বুলিয়ান ব্যবহার করে কাজ করবে

$Firefox = Get-WmiObject -namespace root\cimv2\sms -class SMS_InstalledSoftware -filter "ARPDisplayName LIKE '%Firefox%'"
if($Firefox){return $true}else{return $false}

ডাব্লুএমআইয়ের ক্যোয়ারী যদি কোনও ফলাফল ফেরত দেয় এবং যদি না দেয় তবে এটি মূলত সত্য হবে। তারপরে আপনি মূলত আপনার অ্যাপ্লিকেশনটিতে বিশ্বব্যাপী শর্তটি লাইন দিয়ে ব্যবহার করতে পারেন: ফায়ারফক্স 2 অবশ্যই সমান সত্য। আমি এখন এই পদ্ধতিটি বেশিরভাগ কনফিগারেশন আইটেম এবং অ্যাপ্লিকেশন সনাক্তকরণ পদ্ধতির জন্য ব্যবহার করছি যেখানে কোনও এমএসআই যদি ব্যবহার না করা হয়।

আপনি যদি বর্তমানে যেমন কাজগুলি চালিয়ে যেতে চান তবে আমাকে @ 1.618 টি মন্তব্যে একমত হতে হবে।

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