Kami telah menangani semua logika penargetan kami untuk Paket (dan sekarang Aplikasi) dengan Koleksi. Sekarang kami telah pindah dari SCCM 2007 ke SCCM 2012 SP1, kami merekomendasikan agar kami memindahkan logika itu ke model Program-Aplikasi dan mengimplementasikannya menggunakan Ketentuan dan Persyaratan Global. Ini memiliki sejumlah manfaat positif - Koleksi digunakan murni untuk pengelompokan hierarkis atau logis, kami mendapatkan penyebaran Aplikasi yang lebih mulus saat menggunakan Supercedence, dan peningkatan logika Deteksi.
Saya akan menggunakan Adobe Flash Player Plugin sebagai contoh. Kami hanya ingin menggunakan Adobe Flash Player Plugin ke workstation yang telah diinstal Firefox. Menggunakan model Program-Paket SCCM 2007 kami akan membuat Koleksi berdasarkan kueri WQL yang berisi semua workstation dengan Firefox yang diinstal:
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"
Setelah Koleksi dibuat, kami akan menggunakan Paket-Program kami untuk menentangnya. Saya mencoba mereplikasi logika yang sama menggunakan logika Kondisi dan Persyaratan Global Program-Program. Semua upaya saya untuk membangun kondisi global saya berdasarkan hasil WQL dalam kesalahan wbemErrTypeMismatch ( 2147749893 (0x80041005)
).
Sekarang karena praktik terbaik merekomendasikan agar kami menjaga agar logika penargetan kami tetap dibundel dengan Aplikasi, apa yang perlu kami lakukan adalah membuat WQL query Global Condition yang sesuai dan kemudian kami dapat mengevaluasinya menggunakan Persyaratan Aplikasi.
Mari kita mulai dengan permintaan WQL. Saya menggunakan Scriptomatic untuk membuang semuanya di SMS_InstalledSoftware
Kelas WMI yang merupakan bagian dari root\cimv2\sms
namespace. Saya cukup yakin bahwa SMS_InstalledSoftware adalah tempat terbaik untuk menjalankan kueri ketika mencoba mengevaluasi apakah sesuatu diinstal atau tidak karena Win32_Product hanya untuk perangkat lunak yang diinstal Windows Installer.
Saya menemukan objek terkait Firefox berikut:
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
Menjalankan WQL terhadap properti ProductName tampaknya menjadi cara yang baik untuk pergi. Jika saya menjalankan SELECT * FROM SMS_InstalledSoftware WHERE ProductName like '%Firefox%'
di wbemtest
melawan root\cimv2\sms
namespace saya mendapatkan berikut:
Mari kita coba membangun Kondisi Global di SCCM berikutnya:
Ini benar-benar tidak intuitif tetapi saya pikir saya memahaminya dengan benar. Ketentuan Global hanya mengatur bagian kondisional dari seluruh logika Program-Aplikasi, bukan logika Program-Aplikasi yang evaluatif . Untuk alasan itu, saya tidak melakukan apa pun dalam klausa WHERE. Kondisi Global ini harus mencari di root\cimv2\sms
namespace untuk SMS_InstalledSoftware
kelas dan "mengembalikan" properti ProductName. Saya sekarang harus dapat mengevaluasi nilai Properti itu dengan Persyaratan Jenis Penerapan Aplikasi saya, kan?
Sekali lagi - Saya tidak mengerti bagaimana logika Kondisi / Persyaratan Global saling terkait atau ini hanya tidak intuitif tetapi Persyaratan di atas harus dapat melihat semua String yang dikembalikan dari ProductName
properti, mengevaluasi apakah ada di antara mereka yang mengandung 'Firefox 'dan jika begitu dengan senang hati gunakan Plugin Adobe Flash Player.
Sayangnya itu tidak berhasil. Hampir semua mesin di Deployment mengembalikan kesalahan berikut:
2147749893 (0x80041005) Type Mismatch
Saya menganggap ini berarti bahwa Kondisi Global mengembalikan jenis variabel yang berbeda dari yang saya evaluasi dalam Persyaratan saya, tetapi saya tidak tahu bagaimana cara memecahkannya dari sini. Saya sudah mencoba mengatur tipe Kondisi Global saya ke Boolean, dan mengatur klausa WHERE ( Name like '%Firefox%'
) tetapi ini menghasilkan kesalahan yang sama.
Bagaimana saya bisa meniru Koleksi berbasis permintaan WQL saya menggunakan logika penargetan Kondisi / Persyaratan Global Program-Program? Apa yang saya lewatkan di sini (selain apt-get)?