Luc*_*cas 64 ide powershell du powergui
我有一个PowerShell脚本,它使用du.exe(最初来自Sysinternals的磁盘使用情况)来计算目录的大小.
如果我du c:\Backup在控制台中运行,它按预期工作,但在ISE或PowerGui中运行的相同代码行给出了预期的结果加上错误
+ du <<<< c:\backup
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Run Code Online (Sandbox Code Playgroud)
这是为什么?如何避免此错误?我尝试使用invoke-expression &,但是没有去.
谢谢您的帮助.
Kei*_*ill 46
为避免这种情况,您可以将stderr重定向为null,例如:
du 2> $null
Run Code Online (Sandbox Code Playgroud)
本质上,控制台主机和ISE(以及远程处理)以不同方式处理stderr流.在控制台主机上,PowerShell支持像edit.com这样的应用程序与其他将彩色输出和错误写入屏幕的应用程序一起工作非常重要.如果未在控制台主机上重定向I/O流,则PowerShell会为本机EXE提供直接写入的控制台句柄.这绕过的PowerShell这样的PowerShell不能看到有这么写也不能报告通过$错误或写信给PowerShell的标准错误流的错误错误.
ISE和远程处理不需要支持这种情况,所以他们确实看到stderr上的错误,然后写错误并更新$ error.
Sim*_*ing 39
我最近一直面临同样的问题,但我想将stderr输出定向到stdout.您会认为以下内容可行:
& du 2>&1
Run Code Online (Sandbox Code Playgroud)
但PowerShell将解释重定向并在'du'完成后处理它.我找到的解决方法是使用cmd.exe/c调用它:
& cmd /c 'du 2>&1'
Run Code Online (Sandbox Code Playgroud)
ssc*_*rth 23
另一种抑制NativeCommandError输出的方法是将管道中的对象转换为字符串,如本答案底部所述:
du c:\Backup 2>&1 | %{ "$_" }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45360 次 |
| 最近记录: |