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

PowerShell日志函数合并咨询:新手对变量及逻辑的疑问

原日志函数逻辑解析

关于$msg变量的说明

每个函数里的$msg是函数的参数,调用函数时需要传入具体内容(比如LogSuccess "文件复制完成"),所以不需要在脚本其他位置提前声明,它的值由调用时的输入决定。

四个函数的共性与差异

四个函数核心逻辑完全一致,仅在三个细节上有区别:

  • 控制台输出的前缀(SUCCESS:/ERROR:/WARNING:/无)
  • 控制台输出的文字颜色
  • 写入日志文件时的前缀(Logging函数无前缀)
合并后的通用日志函数

通过新增Level参数区分日志类型,抽离重复逻辑,实现一个通用函数:

Function global:Write-Log {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Message,
        [ValidateSet("Success", "Error", "Warning", "Info")]
        [string]$Level = "Info"
    )

    # 集中定义各日志级别的配置:前缀、颜色、日志前缀
    $levelConfig = @{
        Success = @{ Prefix = "SUCCESS: "; Color = "Green"; LogPrefix = "SUCCESS: " }
        Error   = @{ Prefix = "ERROR: "; Color = "Red"; LogPrefix = "ERROR: " }
        Warning = @{ Prefix = "WARNING: "; Color = "Yellow"; LogPrefix = "WARNING: " }
        Info    = @{ Prefix = ""; Color = "Cyan"; LogPrefix = "" }
    }

    $config = $levelConfig[$Level]

    # 控制台输出内容
    Write-Host "$($config.Prefix)$Message" -ForegroundColor $config.Color

    # 生成带时间戳的日志内容
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logContent = "$timestamp:  $Message"

    # 开启日志模式时写入文件
    if ($global:loggingmode) {
        Write-Output "$($config.LogPrefix)$logContent" | Out-File -FilePath $global:logfile -Append
    }
}

使用示例

  • 成功日志:Write-Log -Message "数据库备份完成" -Level Success
  • 错误日志:Write-Log -Message "连接数据库失败" -Level Error
  • 警告日志:Write-Log -Message "磁盘剩余空间不足" -Level Warning
  • 普通信息:Write-Log -Message "开始执行备份任务"(默认使用Info级别)

合并优势

  • 消除代码冗余,后续修改日志格式、写入逻辑只需维护一处
  • 通过ValidateSet限制日志级别输入,避免拼写错误
  • 配置集中管理,新增日志级别只需在$levelConfig中添加对应条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:45:35