You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Invoke-CimMethod遇无效字符,求助SCCM ZTI部署PXE请求清除问题

解决SCCM ZTI部署脚本中清除PXE请求的两个问题

针对你在编写PowerShell脚本时遇到的两个问题,我来逐一给出实用解决方案:

1. WMI命令无论计算机是否存在都返回StatusCode 0的问题

这个现象其实是SCCM的SMS_Site.ClearLastPxeAdvertisement方法的设计特性——即使传入的资源ID不存在,它也不会返回错误状态码,而是静默处理。要区分“目标计算机不存在”和“成功清除PXE请求”的情况,你需要先验证计算机是否在SCCM中存在,再执行清除操作。

改进后的WMI脚本示例:

# 配置参数
$targetComputer = "YourComputerName"
$sccmSiteCode = "ABC"
$wmiNamespace = "root\SMS\site_$sccmSiteCode"

# 第一步:查询目标计算机的资源ID
try {
    $systemResource = Get-WmiObject -Namespace $wmiNamespace -Class SMS_R_System -Filter "Name='$targetComputer'" -ErrorAction Stop
} catch {
    Write-Error "查询SCCM资源失败:$_"
    exit 1
}

if ($systemResource) {
    # 第二步:调用清除PXE请求的方法
    $siteInstance = Get-WmiObject -Namespace $wmiNamespace -Class SMS_Site -Filter "SiteCode='$sccmSiteCode'"
    $clearResult = $siteInstance.ClearLastPxeAdvertisement($systemResource.ResourceID)

    if ($clearResult.ReturnValue -eq 0) {
        Write-Host "✅ 成功清除计算机 $targetComputer 的PXE请求"
    } else {
        Write-Warning "⚠️ 清除PXE请求失败,返回值:$($clearResult.ReturnValue)"
    }
} else {
    Write-Warning "⚠️ 未找到计算机 $targetComputer,请确认名称或SCCM同步状态"
}

2. Invoke-CimMethod遇到无效字符的问题

这个问题通常出现在参数格式错误、特殊字符未转义,或者命名空间/方法名拼写错误上。Invoke-CimMethod对参数的类型和格式要求更严格,尤其是当计算机名称包含单引号这类特殊字符时,必须先转义。

正确的Invoke-CimMethod实现:

# 配置参数
$targetComputer = "YourComputerName"
$sccmSiteCode = "ABC"
$cimNamespace = "root\SMS\site_$sccmSiteCode"

# 处理计算机名称中的特殊字符(比如单引号)
$escapedComputerName = $targetComputer -replace "'", "''"

# 第一步:查询目标计算机的资源ID
try {
    $systemResource = Get-CimInstance -Namespace $cimNamespace -ClassName SMS_R_System -Filter "Name='$escapedComputerName'" -ErrorAction Stop
} catch {
    Write-Error "查询SCCM资源失败:$_"
    exit 1
}

if ($systemResource) {
    # 第二步:调用清除PXE请求的方法
    $methodParams = @{
        ResourceID = $systemResource.ResourceID
    }

    try {
        $clearResult = Invoke-CimMethod -Namespace $cimNamespace -ClassName SMS_Site -MethodName ClearLastPxeAdvertisement -Arguments $methodParams -ErrorAction Stop
        if ($clearResult.ReturnValue -eq 0) {
            Write-Host "✅ 成功清除计算机 $targetComputer 的PXE请求"
        } else {
            Write-Warning "⚠️ 清除PXE请求失败,返回值:$($clearResult.ReturnValue)"
        }
    } catch {
        Write-Error "调用CIM方法失败:$_"
    }
} else {
    Write-Warning "⚠️ 未找到计算机 $targetComputer,请确认名称或SCCM同步状态"
}

关键注意点:

  • 如果你的计算机名称包含特殊字符(如'、&),一定要用-replace "'", "''"转义单引号,避免Filter语句语法错误
  • 确保$cimNamespace中的SiteCode正确,比如root\SMS\site_ABC(ABC是你的SCCM站点代码)
  • Invoke-CimMethod的Arguments参数必须是哈希表,键名要和方法的参数名完全匹配(这里是ResourceID)

内容的提问来源于stack exchange,提问作者Patrick Pruneau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:15:48