Я пишу пакетный сценарий для получения кодов сайта SCCM от клиентов SCCM. Я хотел бы извлечь код сайта клиента и сравнить его с массивом кодов сайта. Если есть совпадение, я удалю клиент. У меня есть часть удаления. Это нужно сделать в виде командного файла.
Я могу получить код сайта с помощью следующей команды WMIC
WMIC /namespace:\\root\ccm path sms_client CALL GetAssignedSite
Это дает следующий результат
Executing (sms_client)->GetAssignedSite()
Method execution successful.
Out Parameters:[abstract]
class __PARAMETERS
{
[out, ID(0): DisableOverride ToInstance] string sSiteCode = "BBB";
[out] uint32 ReturnValue;
};
Как я могу извлечь и сравнить код сайта в пакетном скрипте - «BBB» в этом примере.
Вот что у меня есть для Powershell в качестве примера, но это должен быть командный файл.
$SiteCode = ([wmiclass]'ROOT\ccm:SMS_Client').GetAssignedSite()
$SCCMSiteCodes = @('AAA', 'BBB', 'CCC', 'GGG', 'VVV')
If ($SCCMSiteCodes -Contains $SiteCode.sSiteCode)
{ uninstall SCCM client }
Я закончу запускать файл .bat с командой psexec для списка серверов.
Спасибо за помощь.
Еще раз спасибо, dbenham. Я немного изменил код, добавив второй оператор IF.
SETLOCAL enableDelayedExpansion
SET "SCCMSiteCodes= 'AAA' 'BBB' 'CCC' 'GGG 'VVV' "
FOR /f delims^=^"^ tokens^=2^ eol^= %%A in (
'wmic /namespace:\\root\ccm path sms_client CALL GetAssignedSite^|findstr sSiteCode'
) DO (
IF "!SCCMSiteCodes:'%%A'=!" neq "!SCCMSiteCodes!" (
CALL :TEE SCCM client - Sitecode match found
REM Your uninstall CALL goes here
)
IF "!SCCMSiteCodes:'%%A'=!" equ "!SCCMSiteCodes!" (
CALL :TEE SCCM client - Sitecode match not found
GOTO NOTFOUIND
)
)
Я нашел другой сценарий, который запускает удаление, и я не совсем уверен, почему, поскольку он не содержит никаких кодов сайта. В этом случае сервер не достиг управляющего сервера SCCM, поэтому он не получил код сайта.
Для этих серверов ответ на
WMIC /namespace:\\root\ccm path sms_client CALL GetAssignedSite
является
Executing (sms_client)->GetAssignedSite()
ERROR:
Description = Can't enumerate any more, because the associated data is missing
Я занимаюсь исследованием, но пока не нашел ответа. Какие-либо предложения?
Вот один из способов сделать это:
@echo off
setlocal enableDelayedExpansion
set "SCCMSiteCodes= 'AAA' 'BBB' 'CCC' 'GGG 'VVV' "
for /f delims^=^"^ tokens^=2^ eol^= %%A in (
'wmic /namespace:\\root\ccm path sms_client CALL GetAssignedSite^|findstr sSiteCode'
) do (
if "!SCCMSiteCodes:'%%A'=!" neq "!SCCMSiteCodes!" (
REM Your uninstall CALL goes here
)
)
В коде используется пара не интуитивно понятных вещей: