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

如何获取PowerShell执行的最后一条命令以适配SCCM日志查看器

让PowerShell日志函数适配SCCM日志查看器:自动填充组件字段

核心思路

要让日志的组件字段精准对应触发日志的主命令,靠$$或Get-History这类历史命令方案不太靠谱——前者只能拿到上一条执行的命令,后者的历史记录有延迟且上下文匹配度低。更可靠的方式是利用PowerShell的调用栈(Call Stack),实时捕获当前触发日志的命令上下文。

具体实现方案

1. 构建适配SCCM的日志函数

下面的示例函数会自动从调用栈中提取主命令,填充到SCCM日志要求的组件字段:

function Write-SCCMLog {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string]$Message,
        [ValidateSet('Info','Warning','Error')]
        [string]$LogLevel = 'Info'
    )

    # 跳过当前日志函数,获取上层调用的命令信息
    $caller = Get-PSCallStack | Select-Object -Skip 1 -First 1
    
    # 提取组件名:优先取命令名,无则标记为Unknown
    $component = if ($caller.Command) { 
        $caller.Command 
    } else { 
        'Unknown' 
    }

    # 生成符合SCCM日志格式的条目(实际可替换为写入指定日志文件的逻辑)
    $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss.fff'
    $logEntry = "[$timestamp][$LogLevel][$component] $Message"

    # 输出日志(实际场景可改为Add-Content写入日志文件)
    Write-Output $logEntry
}

2. 测试使用示例

不管是封装在函数里的操作,还是直接调用Cmdlet,都能精准捕获主命令:

# 封装在函数中的场景
function Copy-Data {
    try {
        Copy-Item -Path 'C:\Source\test.txt' -Destination 'C:\Dest\' -ErrorAction Stop
        Write-SCCMLog -Message '数据已成功复制' -LogLevel 'Info'
    }
    catch {
        Write-SCCMLog -Message "复制失败:$_" -LogLevel 'Error'
    }
}

# 直接调用Cmdlet的场景
Copy-Item -Path 'C:\Source\config.ini' -Destination 'C:\Backup\'
Write-SCCMLog -Message '配置文件已备份' -LogLevel 'Info'

执行后会生成如下日志条目:

[2024-05-20 15:40:22.345][Info][Copy-Data] 数据已成功复制
[2024-05-20 15:40:25.678][Info][Copy-Item] 配置文件已备份

3. 进阶优化:适配直接执行的脚本行

如果是在脚本里直接执行命令(而非封装函数),可以优化调用栈的解析逻辑,提取命令行的第一个词:

$caller = Get-PSCallStack | Select-Object -Skip 1 -First 1
$component = if ($caller.InvocationInfo.MyCommand.Name) {
    $caller.InvocationInfo.MyCommand.Name
} elseif ($caller.InvocationInfo.Line) {
    # 从执行行中提取第一个命令词
    ($caller.InvocationInfo.Line -split '\s+')[0]
} else {
    'Unknown'
}

这样即使是一行式的命令执行,也能准确把Copy-Item这类Cmdlet名填充到组件字段。

内容的提问来源于stack exchange,提问作者Roque Sosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:28:14