所以我有一个PowerShell脚本,它定义了一个日志并调用另一个powershell函数:(下面的例子)
<?php
session_start();
$session = $_SESSION['pass'];
$post = $_POST['pass'];
$name = $_POST['name'];
if($post === $session){
echo "<p>Good request</p><br>";
}
else{
echo "<p>Bad request</p><br>";
}
?>
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', 'myArrays.txt', true);
xmlhttp.send();
xmlhttp.onreadystatechange = processRequest;
function processRequest(e) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = JSON.parse(xmlhttp.responseText);
for (var i = 0; i < response.length; i++) {
document.write(response[i].username + ' ' + response[i].password + '<br>')
}
}
}
</script>
当我调用Start-Transcript -path ".\ExampleLog.txt"
.\GetDataFromDatabase.ps1
Stop-Transcript
时,它不会记录脚本打印的任何内容,尽管它出现在PowerShell窗口中。
如果我保存脚本的输出并回显它:
.\GetDataFromDatabase.ps1
它只记录脚本的结果(例如“COPY 102304”),并且没有PostgreSQL函数打印到命令窗口的信息。
如何确保记录postgres函数中引发的信息?
答案 0 :(得分:1)
正如@DavidBrabant所提到的,GetDataFromDatabase.ps1
很可能是将状态输出写入主机控制台。主机输出通常无法捕获,因为它不会转到常规output streams。要解决此问题,您需要以某种方式将主机输出转换为其他流之一。据我所知,实现此目的的唯一方法是在单独的powershell
进程中运行脚本。这样子进程的主机输出进入父进程的成功输出流:
Start-Transcript -path ".\ExampleLog.txt"
powershell.exe -File .\GetDataFromDatabase.ps1
Stop-Transcript
请注意这种方法存在副作用。例如,其他流以相同的方式被破坏,即详细,调试和警告输出也转到父进程的成功输出流。只有错误输出才会转到错误输出流。此外,父进程的$*Preference
设置不会被子进程继承。
要获得进一步的帮助,您需要显示GetDataFromDatabase.ps1
。