パッケージ(および現在はアプリケーション)のすべてのターゲットロジックをコレクションで処理しています。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_InstalledSoftware
、root\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%'
するwbemtest
とroot\cimv2\sms
、次のようになります。
次に、SCCMでグローバル条件を構築してみましょう。
これは完全に直感的ではありませんが、私はそれを正しく理解していると思います。グローバル条件は、評価対象のアプリケーションプログラムロジックではなく、アプリケーションプログラムロジック全体の条件部分を設定するだけです。そのため、WHERE句では何もしていません。このグローバル条件は、クラスのネームスペースを調べ、ProductNameプロパティを「返す」必要があります。アプリケーションの展開タイプ要件でそのプロパティの値を評価できるはずですよね?root\cimv2\sms
SMS_InstalledSoftware
繰り返しますが、グローバル条件/要件ロジック全体がどのようにぶら下がっているのか理解していないか、これは直感的ではありませんが、上記の要件は、ProductName
プロパティから返されたすべての文字列を調べ、「Firefox」が含まれているかどうかを評価できるはずです'そして、もしそうであれば、Adobe Flash Playerプラグインを喜んでデプロイします。
残念ながら動作しません。Deploymentのほとんどすべてのマシンが次のエラーを返します。
2147749893 (0x80041005) Type Mismatch
これは、グローバル条件が要件で評価している変数とは異なるタイプの変数を返すことを意味しますが、ここからトラブルシューティングする方法がわかりません。グローバル条件のタイプをブールに設定し、WHERE句(Name like '%Firefox%'
)を設定しようとしましたが、同じエラーが発生します。
アプリケーションプログラムのグローバル条件/要件ターゲティングロジックを使用して、WQLクエリベースのコレクションをどのように複製できますか?ここで何が欠けていますか(apt-get以外)?