SCCMグローバル条件WQLクエリタイプの不一致(wbemErrTypeMismatch-0x80041005)


8

パッケージ(および現在はアプリケーション)のすべてのターゲットロジックをコレクションで処理しています。SCCM 2007からSCCM 2012 SP1に移動したので、そのロジックをアプリケーションプログラムモデルに移動し、グローバル条件と要件を使用して実装することをお勧めします。これには多くのメリットがあります。コレクションは純粋に階層的または論理的なグループ化に使用されます。Supercedenceを使用すると、よりシームレスなアプリケーションの展開が実現し、検出ロジックが改善されます。

例として、Adobe Flash Playerプラグインを使用します。FirefoxがインストールされているワークステーションにAdobe Flash Playerプラグインをデプロイしたいだけです。SCCM 2007パッケージプログラムモデルを使用して、Firefoxがインストールされているすべてのワークステーションを含むWQLクエリに基づいてコレクションを作成します。

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"

コレクションを作成したら、それに対してパッケージプログラムを展開します。アプリケーションプログラムのグローバル条件と要件ロジックを使用して、同じロジックを複製しようとしています。WQLクエリベースのグローバル条件を構築しようとすると、すべてwbemErrTypeMismatchエラーが発生します(2147749893 (0x80041005))。



ベストプラクティスでは、ターゲットロジックをアプリケーションにバンドルしておくことを推奨しているため、適切なWQLクエリのグローバル条件を作成し、アプリケーションの要件を使用してそれを評価できます。

WQLクエリから始めましょう。Scriptomaticを使用してSMS_InstalledSoftwareroot\cimv2\sms名前空間の一部であるWMIクラスのすべてをダンプしました。Win32_ProductはWindowsインストーラーでインストールされたソフトウェア専用であるため、何かがインストールされているかどうかを評価する場合、SMS_InstalledSoftwareがクエリを実行するのに最適な場所であると私は確信しています。

次のFirefox関連オブジェクトを見つけました。

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



ProductNameプロパティに対してWQLを実行するのが良い方法のようです。名前空間に対して実行SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'するwbemtestroot\cimv2\sms、次のようになります。

wbemtestの結果



次に、SCCMでグローバル条件を構築してみましょう。

グローバル条件クエリ



これは完全に直感的ではありませんが、私はそれを正しく理解していると思います。グローバル条件は、評価対象のアプリケーションプログラムロジックではなく、アプリケーションプログラムロジック全体の条件部分を設定するだけです。そのため、WHERE句では何もしていません。このグローバル条件は、クラスのネームスペースを調べ、ProductNameプロパティを「返す」必要があります。アプリケーションの展開タイプ要件でそのプロパティの値を評価できるはずですよね?root\cimv2\smsSMS_InstalledSoftware

SCCMの要件



繰り返しますが、グローバル条件/要件ロジック全体がどのようにぶら下がっているのか理解していないか、これは直感的ではありませんが、上記の要件は、ProductNameプロパティから返されたすべての文字列を調べ、「Firefox」が含まれているかどうかを評価できるはずです'そして、もしそうであれば、Adobe Flash Playerプラグインを喜んでデプロイします。

残念ながら動作しません。Deploymentのほとんどすべてのマシンが次のエラーを返します。

2147749893 (0x80041005) Type Mismatch

これは、グローバル条件が要件で評価している変数とは異なるタイプの変数を返すことを意味しますが、ここからトラブルシューティングする方法がわかりません。グローバル条件のタイプをブールに設定し、WHERE句(Name like '%Firefox%')を設定しようとしましたが、同じエラーが発生します。

アプリケーションプログラムのグローバル条件/要件ターゲティングロジックを使用して、WQLクエリベースのコレクションをどのように複製できますか?ここで何が欠けていますか(apt-get以外)?

回答:


1

グローバル条件ダイアログは、おそらくこれまでに見たSCCMの最も直感的でない部分です。

これを試してみてください:

  1. 同じ方法でFirefox 2グローバル条件を再作成しますが、今度は下部のWQLクエリのWhere句フィールドに次のように入力します。 ProductName like "%Firefox%"

  2. アプリケーションの展開タイプの[要件]タブで、Firefox 2グローバル条件を使用しますが、ルールタイプを[存在]に変更します


0

私はこれを実践的にテストする方法がないので、これは当て推量です

WQLにはネイティブの包含演算子がないため、Contains演算子はPowerShellと同様に扱われると思います。

$referenceCollection -Contains $testValue

この理論が正しければ、基礎となる要件ロジックは次のように拡張されます。

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

の左側のオペランドが-Containsコレクションではなく、テスト値と同じタイプの単一のインスタンスである場合(例では、2つの文字列)、-Containsとまったく同じように扱われ-eqます。

したがって、"Microsoft Firefox 23 (en-us)" -Contains "firefox"常にfalseを返します。


0

個人的には、WQLクエリではなく、Powershellスクリプトを使用します。私のpowershellは、あなたがしているWQLとほとんど同じことを行います(同じWMIクラスをクエリする場合でも)が、ブール値を使用して動作します。

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

これは基本的に、WMIクエリが結果を返す場合はtrueを返し、そうでない場合はfalseを返します。その後、基本的にアプリケーションのグローバル条件を使用できます。Firefox2はtrueに等しい必要があります。私は現在、この方法をMSIが使用されていない場合にMSIが使用される構成アイテムとアプリケーション検出方法に主に使用して、これをたくさん行ってきました。

あなたが現在のように物事を続けたいと思っているなら、私は@ 1.618コメントに同意する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.