[server] SCCM 전역 조건 WQL 쿼리 유형 불일치 (wbemErrTypeMismatch-0x80041005)

우리는 컬렉션으로 패키지 (및 현재 애플리케이션)에 대한 모든 타겟팅 로직을 처리하고 있습니다. 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하면 다음과 같은 결과가 나타납니다.

wbemtest 결과

다음에 SCCM에서 전역 조건을 작성해 봅시다 :

전역 조건 쿼리

이것은 완전히 직관적이지 않지만 올바르게 이해한다고 생각합니다. 글로벌 조건은 단지 설정 조건 되지 않은의 전체 응용 프로그램 로직의 일부를 평가하는 응용 프로그램 논리. 그런 이유로 나는 WHERE 절에서 아무것도하지 않습니다. 이 전역 조건은 클래스 의 root\cimv2\sms네임 스페이스 에서 찾아 SMS_InstalledSoftwareProductName 속성을 “반환”해야합니다. 이제 응용 프로그램의 배포 유형 요구 사항으로 해당 속성의 가치를 평가할 수 있어야합니다.

SCCM 요구 사항

다시 말하지만 전체 전역 조건 / 요구 사항 논리가 어떻게 연결되는지 이해하지 못하거나 이것이 직관적이지 않지만 위의 요구 사항은 ProductName속성 에서 반환 된 모든 문자열을 볼 수 있어야합니다. ‘인 경우 Adobe Flash Player 플러그인을 행복하게 배포하십시오.

불행히도 작동하지 않습니다. 배포의 거의 모든 컴퓨터가 다음 오류를 반환합니다.

2147749893 (0x80041005) Type Mismatch

전역 조건이 요구 사항에서 평가하는 것과 다른 유형의 변수를 반환하고 있음을 의미하지만 여기에서 문제를 해결하는 방법을 모릅니다. 전역 조건 유형을 부울로 설정하고 WHERE 절 ( Name like '%Firefox%')을 설정하려고 시도했지만 동일한 오류가 발생합니다.

Application-Program의 글로벌 조건 / 요구 사항 타겟팅 로직을 사용하여 WQL 쿼리 기반 콜렉션을 복제하려면 어떻게해야합니까? 내가 여기서 무엇을 놓치고 있습니까?



답변

Global Condition 대화 상자는 아마도 지금까지 본 SCCM의 가장 직관적이지 않은 부분 일 것입니다.

이것을 시도하십시오 :

  1. Firefox 2 전역 조건을 동일한 방식으로 다시 작성하지만 이번에는 하단의 WQL Query Where Clause 필드에 다음을 입력하십시오. ProductName like "%Firefox%"

  2. 응용 프로그램 배포 유형의 요구 사항 탭에서 Firefox 2 전역 조건을 사용하지만 규칙 유형을 기존으로 변경하십시오.


답변

이것을 테스트 할 방법이 없기 때문에 이것은 자격을 갖춘 추측입니다.

WQL에는 기본 포함 Contains연산자가 없으므로이 연산자는 PowerShell에서와 같이 취급됩니다.

$referenceCollection -Contains $testValue

이 이론이 맞으면 기본 요구 사항 논리가 다음과 같이 확장됩니다.

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

왼쪽 피연산자 -Contains가 모음이 아니라 테스트 값과 동일한 유형의 단일 인스턴스 (예 : 두 문자열) 인 -Contains경우 정확히로 취급됩니다 -eq.

따라서 "Microsoft Firefox 23 (en-us)" -Contains "firefox"항상 false를 반환합니다.


답변

개인적으로 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를 반환합니다. 그런 다음 기본적으로 응용 프로그램에서 다음과 같은 전역 조건을 사용할 수 있습니다. Firefox 2는 true와 같아야합니다. MSI를 사용하지 않는 경우 구성 항목 및 응용 프로그램 탐지 방법에 주로이 방법을 사용 하여이 작업을 많이 수행했습니다.

현재와 ​​같이 계속하고 싶다면 @ 1.618 의견에 동의해야합니다.


답변