Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PowerShell控制台文本写入文件_Powershell - Fatal编程技术网

将PowerShell控制台文本写入文件

将PowerShell控制台文本写入文件,powershell,Powershell,我有一个PowerShell脚本,它连接到一个DB并在一些数据上循环 脚本完成或抛出错误后,我需要将控制台中显示的任何文本附加到日志文件中 我无法使用写入输出实现这一点,因为我不想保存特定的值,我只需要将整个控制台文本附加到一个文件中 多谢各位 编辑: 事实上,我要寻找的最终结果是一个带有时间戳的日志文件,下面是我的代码: $server = "USER\SQLEXPRESS" $database = "database_test" $tablequery = "SELECT name from

我有一个PowerShell脚本,它连接到一个DB并在一些数据上循环

脚本完成或抛出错误后,我需要将控制台中显示的任何文本附加到日志文件中

我无法使用
写入输出
实现这一点,因为我不想保存特定的值,我只需要将整个控制台文本附加到一个文件中

多谢各位

编辑:

事实上,我要寻找的最终结果是一个带有时间戳的日志文件,下面是我的代码:

$server = "USER\SQLEXPRESS"
$database = "database_test"
$tablequery = "SELECT name from sys.tables"

#Delcare Connection Variables
$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};"
$connectionString = [string]::Format($connectionTemplate, $server, $database)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString

$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = $tablequery
$command.Connection = $connection

#Load up the Tables in a dataset
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()

$DriveName = (get-location).Drive.Name
$extractDir = md -Force "$($DriveName):\csv\files"

# Loop through all tables and export a CSV of the Table Data
foreach ($Row in $DataSet.Tables[0].Rows)
{
    $connection.open();
    #Specify the output location of your dump file
    $command.CommandText = "SELECT * FROM [$($Row[0])]"
    $command.Connection = $connection

    (Get-Culture).NumberFormat.NumberDecimalSeparator = '.'
    (Get-Culture).DateTimeFormat.ShortDatePattern = 'yyyy-MM-dd'

    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $command
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    $connection.Close()

    $extractFile = "$($extractDir)\$($Row[0]).csv"
    $DataSet.Tables[0]  | Export-Csv $extractFile -NoTypeInformation -Encoding UTF8
}
我需要在日志文件中使用时间戳打印导出到csv(
$extractFile
)的每个文件名,然后如果发生错误,我也需要使用时间戳打印该文件名,依此类推,直到脚本完成。

您可以用于调试目的:

Start-Transcript -path "C:\temp\myTranscript.txt"

在脚本开始时添加,并将所有控制台输出写入
C:\temp\myTranscript.txt

您可以使用或编写自己的代码来完成此操作(将控制台输出存储到变量中,并在需要时附加包含内容的文本文件)。注意
-Append
参数和
开始转录本

如果没有代码,就很难知道推荐哪一种

扩大 现在您已经添加了一些代码,请参阅关于每个方法的其他信息。我不熟悉通过PowerShell执行的SQL,因此不确定您将获得何种类型的输出/错误(关于错误,特别是在存在终止或非终止的情况下)

成绩单

Start Transcript
应该放在开头,而
Stop Transcript
应该放在结尾。这将记录控制台上通常显示的内容。在已录制成绩单时运行
Start Transcript
,将导致严重错误

Start-Transcript -Path "c\temp\mylogfile.txt"

$server = "USER\SQLEXPRESS"
$database = "database_test"
$tablequery = "SELECT name from sys.tables"
...

...
    $extractFile = "$($extractDir)\$($Row[0]).csv"
    $DataSet.Tables[0]  | Export-Csv $extractFile -NoTypeInformation -Encoding UTF8
}

Stop-Transcript

终止错误

添加
尝试
/
捕获
/
最后
,视情况而定。您可以懒散地在整个代码中添加这一点,也可以正确地执行并包装可能导致错误的部分

无终止错误

只需添加一行即可导出错误。确保清除每个循环的自动变量
$Error

...
foreach ($Row in $DataSet.Tables[0].Rows)
{
    $Error.Clear()
    $connection.open();
    #Specify the output location of your dump file
    ...

    ...
    ...
    $extractFile = "$($extractDir)\$($Row[0]).csv"
    $DataSet.Tables[0]  | Export-Csv $extractFile -NoTypeInformation -Encoding UTF8

    # if there are no errors, write filename. Otherwise write errors
    if([string]::IsNullOrEmpty($Error){
        "$(Get-Date -f 'yyyy-MM-dd hh:mm:ss') $extractFile" | Out-File "c:\temp\mylogfile.txt" -Append
    }else{
        "$(Get-Date -f 'yyyy-MM-dd hh:mm:ss') $Error" | Out-File "c:\temp\mylogfile.txt" -Append
    }
}
...

我更新了我的问题,这样你就可以看到我真正想做的事情。它不起作用,如果你想看的话,我已经更新了我的问题。你把
开始转录本放在哪里了?
在脚本的末尾应该在脚本的最开头。它说,
文件
参数无效
...
foreach ($Row in $DataSet.Tables[0].Rows)
{
    $Error.Clear()
    $connection.open();
    #Specify the output location of your dump file
    ...

    ...
    ...
    $extractFile = "$($extractDir)\$($Row[0]).csv"
    $DataSet.Tables[0]  | Export-Csv $extractFile -NoTypeInformation -Encoding UTF8

    # if there are no errors, write filename. Otherwise write errors
    if([string]::IsNullOrEmpty($Error){
        "$(Get-Date -f 'yyyy-MM-dd hh:mm:ss') $extractFile" | Out-File "c:\temp\mylogfile.txt" -Append
    }else{
        "$(Get-Date -f 'yyyy-MM-dd hh:mm:ss') $Error" | Out-File "c:\temp\mylogfile.txt" -Append
    }
}
...