我正在使用批处理文件运行 powershell 脚本。
我的要求是:-
- 在批处理cmd中显示输出,同时将输出保存在TXT文件中。笔记,截至目前,输出已保存在 txt 文件中,但输出在批处理 cmd 中不可见。
- 在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。
这可能无法满足您的确切要求,但自从我开始尝试回答该问题以来,您已经对该问题进行了两次实质性的编辑,而且我已经没有时间了。