如何将PowerShell磁盘空间检查脚本的执行错误写入日志?
解决PowerShell磁盘检查脚本的错误日志写入问题
你的PowerShell脚本在检查多台设备磁盘空间时,Get-WmiObject抛出的RPC不可用等错误只会显示在控制台,没有写入日志文件。要解决这个问题,需要将错误流的内容也捕获并写入日志,以下是两种可行的修改方案:
方案一:直接重定向错误流到输出流
在Get-WmiObject命令后添加2>&1,将错误流合并到标准输出流,这样错误信息会被一起存入变量,最终写入日志文件:
$equipos = "D:\SCRIPTSM\AAAA\equipos.txt" $listaEquipos = Get-Content $equipos $fecha = (Get-Date).ToString('dd.MM.yyyy') $espaciotxt = foreach ($equipo in $listaEquipos){ # 添加2>&1将错误流重定向到输出流 Get-WmiObject -Class Win32_LogicalDisk -ComputerName $equipo -Filter "drivetype=3" -ErrorAction SilentlyContinue 2>&1 | Sort-Object -Property DeviceID -ErrorAction SilentlyContinue | Format-Table -Property DeviceID, @{name='EspacioLIBRE(MB)';expression={$_.Freespace / 1MB -as [int]}}, @{name='TamañoDISCO(GB)';expression={$_.Size / 1GB -as [int]}}, @{name='%Libre';expression={$_.FreeSpace / $_.Size * 100 -as [int]}} -ErrorAction SilentlyContinue Write-Output "Ip del equipo : $equipo fecha del test: $fecha" } $espaciotxt | Out-File C:\Users\AAAAA\Desktop\PRU.txt -Append
方案二:使用Try/Catch捕获并格式化错误信息
如果希望错误信息更清晰易读,可以用try/catch块捕获异常,将错误信息格式化后添加到输出内容中:
$equipos = "D:\SCRIPTSM\AAAA\equipos.txt" $listaEquipos = Get-Content $equipos $fecha = (Get-Date).ToString('dd.MM.yyyy') $espaciotxt = foreach ($equipo in $listaEquipos){ try { Get-WmiObject -Class Win32_LogicalDisk -ComputerName $equipo -Filter "drivetype=3" -ErrorAction Stop | Sort-Object -Property DeviceID | Format-Table -Property DeviceID, @{name='EspacioLIBRE(MB)';expression={$_.Freespace / 1MB -as [int]}}, @{name='TamañoDISCO(GB)';expression={$_.Size / 1GB -as [int]}}, @{name='%Libre';expression={$_.FreeSpace / $_.Size * 100 -as [int]}} } catch { Write-Output "ERROR al conectar con $equipo : $($_.Exception.Message)" } Write-Output "Ip del equipo : $equipo fecha del test: $fecha" Write-Output "-----------------------------------------" # 添加分隔线,区分不同设备的结果 } $espaciotxt | Out-File C:\Users\AAAAA\Desktop\PRU.txt -Append
关键说明:
-ErrorAction Stop:让Get-WmiObject遇到错误时抛出终止异常,确保catch块能捕获到错误。2>&1:PowerShell中,2代表错误流,1代表标准输出流,2>&1表示将错误流的内容重定向到标准输出流。-Append:如果希望每次执行脚本时保留之前的日志,添加这个参数避免覆盖原有内容。
内容的提问来源于stack exchange,提问作者AALV8
相关产品推荐
相关产品推荐

