如何记录已运行的PowerShell命令

如何记录已运行的PowerShell命令,powershell,Powershell,我是PowerShell的新手,所以这可能是显而易见的,或者我的方法是错误的。但是在这里和谷歌搜索对我没有帮助(可能是搜索了错误的术语?) 我正在尝试编写一个简单的PowerShell脚本(工作/运行没有问题)。但是,我还需要将进程(命令运行和任何输出)记录到一个txt文件中,这是我正在努力实现的。我曾尝试使用start transcript并添加-verbose公共参数,但它没有像我预期的那样工作 我的最终目标是让脚本在我们的一台服务器上运行,该服务器将停止服务,停止服务的任何相关进程,然后再

我是PowerShell的新手,所以这可能是显而易见的,或者我的方法是错误的。但是在这里和谷歌搜索对我没有帮助(可能是搜索了错误的术语?)

我正在尝试编写一个简单的PowerShell脚本(工作/运行没有问题)。但是,我还需要将进程(命令运行和任何输出)记录到一个txt文件中,这是我正在努力实现的。我曾尝试使用start transcript并添加
-verbose
公共参数,但它没有像我预期的那样工作

我的最终目标是让脚本在我们的一台服务器上运行,该服务器将停止服务,停止服务的任何相关进程,然后再次启动服务。但是对于这个无法记录正在发生的事情的示例,我将其简化为只是启动和停止一个进程。我的例子如下:

Start-Transcript -path "C:\tester.txt" 

Write-Host "starting the shell command"

Start-Process notepad -verbose
Start-Sleep -s 5
Stop-Process -processname notepad -verbose

Stop-Transcript

脚本运行,记事本打开,等待5秒钟,然后再次关闭。但是,详细输出仅为stop process命令创建,该命令只会导致写入主机消息并将stop进程写入我的事务/日志文件。但是,我需要它来写入我的文件,说明记事本进程已启动,然后又停止。

下面的脚本将为您提供所需内容:

为了更好地理解,我在脚本中为每个阶段添加了注释。您可以添加Logfile.txt检查它是否存在,基于此,您还可以创建该文件。Get History将为您提供在shell上执行的所有命令的历史记录

$Log_File= "E:\LogFile.txt"

Clear-History
# You can do a file check using Test-Path followed by the path

## Out-file will give the output to the file, -Force will create the file if not existed and -append will append the data.
"starting the shell command" | Out-File $Log_File -Force -Append

Start-Process notepad -verbose

"Notepad started" | Out-File $Log_File -Append

Start-Sleep -s 5
Stop-Process -processname notepad -verbose

"Notepad stopped" | Out-File $Log_File -Force -Append

"List of commands which are executed are below: " | Out-File $Log_File -Force -Append
Get-History | Out-File $Log_File -Append
示例文件输出:

对于远程执行:

获取进程-名称记事本-计算机名称服务器01 |停止进程


注意:有多种远程停止服务的方法。通过PowerShell远程处理查看详细信息。

您的PowerShell版本是什么?我希望它能显示您运行的命令,但它不适合我,所以我正在测试。您是否在ISE中运行它?我得到了与你相似的结果。但它实际上在PowerShell提示符下工作。因此,这将是一个错误或现状。不知道是哪个。试着正常运行PowerShell@Matt-我也尝试过从常规powershell运行脚本,但得到了相同的结果。@Matt-我有以下版本。大调-5,小调-1,建造-14393,版次576是。这也发生在我身上。如果从shell运行命令,会发生什么。。。。不是剧本。我复制并粘贴了你的代码,它成功了。不是答案,而是故障排除。所以,您是否应该删除此解决方案的Transrccript行?你也可以考虑在开始时清理历史,这样你就不会得到之前没有执行的东西。是的。我们可以把成绩单删掉。是的,这也是一个很好的想法,以清除历史的开始。让我说吧@更安全的方法是在每次执行后将
((获取历史记录).CommandLine)[-1]
输出到文件中。这样,您既可以获得订单,又可以保留订单history@Matt:完成修改。是的,我们可以用它also@RanadipDutta-当然越来越近了。当我逐行运行上面的脚本时,我得到了相同的结果,但是当我在ISE或powershell提示符中执行脚本时,我只记录了消息的第一部分,没有命令历史记录。当我在每个命令后添加((get history).commandline)[-1]| Out File$Log_File-Append时,我会返回一个关于空数组的错误。这是否意味着当作为脚本运行时,不会存储历史记录?