我正在编写一个简单的命令/脚本,用于监视PowerShell中的内存使用情况,它看起来如下:
PS C:\Temp_Folder> while ($true) {
>> Get-Date
>> TaskList /FI "PID eq 82660" | findstr /I "Prod"
>> Start-Sleep 1 }
字符串
此命令/脚本在提示符上显示结果,但由于我希望有很多结果,我想输出到一个文件中,所以我这样做了(参见this official URL):
PS C:\Temp_Folder> while ($true) {
>> Get-Date
>> TaskList /FI "PID eq 82660" | findstr /I "Prod"
>> Start-Sleep 1 } 2>&1 >>.\Geheugen.txt
型
然而,这似乎行不通:
PS C:\Temp_Folder> dir Geheugen.txt
dir : Cannot find path 'C:\Temp_Folder\Geheugen.txt' because it does not exist.
At line:1 char:1
+ dir Geheugen.txt
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Temp_Folder\Geheugen.txt:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
型
我已经尝试了有和没有错误重定向(2>&1
和使用追加和覆盖(>>
和>
)),但没有运气。
我知道命令/脚本正在工作:我在提示符上看到了结果。
我做错了什么?
调查后编辑:
显然,有一个Out-File
命令,应该如下使用:
PS C:\Temp_Folder> while ($true) {
>> Get-Date
>> TaskList /FI "PID eq 82660" | findstr /I "Prod"
>> Start-Sleep 1 } 2>&1 | Out-File -FilePath .\Geheugen.txt
型
这是非常令人困惑的:
在DOS(Windows命令行)中,总是可以使用标准的重定向操作符>
和>>
重定向到文件。显然,这些操作符在Windows Powershell中也是可以预见的,但有时它们不起作用。有人能准确描述一下吗?
额外测试:
Out-File
似乎不工作,正如你所看到的:
while ($true) {
>> Get-Date
>> TaskList /FI "PID eq 4240" | findstr /I "Prod"
>> Start-Sleep 1 } | Out-file -FilePath .\Prod_Server_Monitoring.txt
型
我收到以下错误消息:
At line:4 char:17
+ Start-Sleep 1 } | Out-file -FilePath .\Prod_Server_Monitoring.tx ...
+ ~
An empty pipe element is not allowed.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement
型
2条答案
按热度按时间hof1towb1#
奇怪。在我的7.4.0中,你的第一个例子没有返回任何错误,使用完全相同的代码。
它也不写文件,但这是正常的:您试图写
while
本身的成功和错误流,而不是它运行的代码的内容。您需要将整个
while(){}
封装在变量(es:$(while{}) >> 'file.txt'
)或脚本块(es:& { while(){} } >> 'file.txt'
)中但是,如果您想保留终端输出,则可能需要使用
Tee-Object
。编辑自问题作者:
我把while循环放在一个变量中,这确实解决了这个问题:
字符串
abithluo2#
你不能在while循环后添加
| Out-File
,因为循环不返回任何值。你需要在特定的命令后添加。同时添加-Append标志以不覆盖你的文件字符串