捕获批量输出并将其作为日志保存在 TXT 文件中

捕获批量输出并将其作为日志保存在 TXT 文件中

我正在使用批处理文件运行 powershell 脚本。

我的要求是:-

  1. 在批处理cmd中显示输出,同时将输出保存在TXT文件中。笔记,截至目前,输出已保存在 txt 文件中,但输出在批处理 cmd 中不可见。
  2. 在C盘建立一个含有系统序列号的文件夹,并在该文件夹中保存txt文件。

批处理文件名:-检查脚本

Powershell 脚本名称:-检查.ps1(powershell 文件包含批量命令,其输出将作为命令提示符显示在批处理文件中)

批处理文件代码:-

@echo off
for /F %%a in ('wmic bios get serialnumber') do call :Sub %%a
:Sub
if not "%*"=="" set SerialNumber=%*

xcopy "%~dp0*" "C:\windows\Temp\Compliance_Check" /q /s /e /y /i
PowerShell.exe -ExecutionPolicy Bypass -File %~dp0Compliance_Check.ps1 > C:\%SerialNumber%\output.txt
pause

答案1

更新回应

批处理文件变为:

PowerShell.exe -ExecutionPolicy Bypass -File %~dp0Check.ps1
pause

并且,使用 Tee-Output 获取管道中上一个命令的输出并将其发送到文件和管道中的下一个命令,PowerShell 将如下所示:

$serialNumber = Get-WmiObject -Class Win32_BIOS | Select-Object -ExpandProperty SerialNumber
$logFilePath = "C:\$serialNumber\posh.log"
if (-not (Test-Path -Path (Split-Path -Path $logFilePath -Parent))) { md $logFilePath }
if (Test-Path -Path $logFilePath) { Remove-Item -Path $logFilePath }

Copy-Item -Path 'C:\test\source\*' -Destination 'C:\test\Temp\Check' -Recurse -Force | Tee-Object -FilePath $logFilePath

Get-Date | Tee-Object -FilePath $logFilePath -Append

Get-ChildItem -Path 'C:\test\Temp\Check' -Recurse | Tee-Object -FilePath $logFilePath -Append

如果您希望将所有内容放在同一个文件中,则第一次之后需要在 Tee-Output 上使用 -Append。

这可能无法满足您的确切要求,但自从我开始尝试回答该问题以来,您已经对该问题进行了两次实质性的编辑,而且我已经没有时间了。

相关内容