PowerShell和bat文件记录

时间:2014-12-02 17:31:50

标签: powershell batch-file logging

我在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数据

1 个答案:

答案 0 :(得分:2)

我不会使用write-host。基本上它的用途是写入控制台。

我使用write-outputwrite-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...