我在PowerShell中编写了一个简单的脚本:
############### script #############################
$Database = @("DatabaseNo1","DatabaseNo2","DatabaseNo3")
Write-Host Running on $Database[0]
#sqlcmd ...........
Write-Host Running on $Database[1]
#sqlcmd ...........
Write-Host Running on $Database[2]
#sqlcmd ...........
Write-Host Stopping...
#psexec ........
#############################################
此脚本使用sqlcmd和psexec以及复制命令运行。 我需要记录PowerShell脚本活动。 然后我编写了运行PowerShell脚本的bat文件
#############################################################
del d:\scripts\log.log
powershell -file d:\scripts\script.ps1 >> d:\scripts\log.log
#############################################################
我在格式化日志文件时遇到问题。 该文件如下所示:
在DatabaseNo2Running上运行DatabaseNo1Running在DatabaseNo3Stoping上运行......
我希望这个日志看起来像:
在DatabaseNo1上运行
来自sqlcmd的一些数据
在DatabaseNo2上运行
来自sqlcmd的一些数据
在DatabaseNo3上运行
来自sqlcmd的一些数据
停止...
一些psexec数据
等
答案 0 :(得分:2)
我不会使用write-host
。基本上它的用途是写入控制台。
我使用write-output
或write-verbose
,这两个cmdlet会将输出传递给管道,或者在使用重定向到文件时:
$Database = @("DatabaseNo1","DatabaseNo2","DatabaseNo3")
Write-Output "Running on $($Database[0])"
#sqlcmd ...........
Write-Output "Running on $($Database[1])"
#sqlcmd ...........
Write-Output "Running on $($Database[2])"
#sqlcmd ...........
Write-Output Stopping...
#psexec ........
#############################################
以下是执行以下命令时的输出:
powershell -file d:\scripts\test.ps1 >> d:\scripts\log.log
Running on DatabaseNo1
Running on DatabaseNo2
Running on DatabaseNo3
Stopping...