우리는 컬렉션으로 패키지 (및 현재 애플리케이션)에 대한 모든 타겟팅 로직을 처리하고 있습니다. 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 쿼리부터 시작하겠습니다. 네임 스페이스의 SMS_InstalledSoftware
일부인 WMI 클래스의 모든 것을 덤프하기 위해 Scriptomatic을 사용했습니다 root\cimv2\sms
. Win32_Product가 Windows Installer가 설치된 소프트웨어 전용인지 여부를 평가하려고 할 때 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 절에서 아무것도하지 않습니다. 이 전역 조건은 클래스 의 root\cimv2\sms
네임 스페이스 에서 찾아 SMS_InstalledSoftware
ProductName 속성을 "반환"해야합니다. 이제 응용 프로그램의 배포 유형 요구 사항으로 해당 속성의 가치를 평가할 수 있어야합니다.
다시 말하지만 전체 전역 조건 / 요구 사항 논리가 어떻게 연결되는지 이해하지 못하거나 이것이 직관적이지 않지만 위의 요구 사항은 ProductName
속성 에서 반환 된 모든 문자열을 볼 수 있어야합니다. '인 경우 Adobe Flash Player 플러그인을 행복하게 배포하십시오.
불행히도 작동하지 않습니다. 배포의 거의 모든 컴퓨터가 다음 오류를 반환합니다.
2147749893 (0x80041005) Type Mismatch
전역 조건이 요구 사항에서 평가하는 것과 다른 유형의 변수를 반환하고 있음을 의미하지만 여기에서 문제를 해결하는 방법을 모릅니다. 전역 조건 유형을 부울로 설정하고 WHERE 절 ( Name like '%Firefox%'
)을 설정하려고 시도했지만 동일한 오류가 발생합니다.
Application-Program의 글로벌 조건 / 요구 사항 타겟팅 로직을 사용하여 WQL 쿼리 기반 콜렉션을 복제하려면 어떻게해야합니까? 내가 여기서 무엇을 놓치고 있습니까?