我正在编写一个批处理脚本来从SCCM客户端中提取SCCM站点代码。 我想拉客户站点代码,并将其与网站代码数组进行比较。 如果有匹配,我会卸载客户端。 我有卸载部分。 这必须作为batch file来完成。
我可以通过以下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作为例子,但这必须是一个batch file。
$SiteCode = ([wmiclass]'ROOT\ccm:SMS_Client').GetAssignedSite() $SCCMSiteCodes = @('AAA', 'BBB', 'CCC', 'GGG', 'VVV') If ($SCCMSiteCodes -Contains $SiteCode.sSiteCode) { uninstall SCCM client }
我将最终使用psexec命令对服务器列表运行.bat文件。
谢谢您的帮助。
再次感谢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 managemnent服务器,因此它没有收到站点代码。
对于这些服务器,响应
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
我正在研究,但还没有拿出答案。 有什么build议么?
这是一个办法:
@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 ) )
代码使用了一些非直观的东西: