有没有办法抑制来自Powershell的所有命令行输出,包括错误

时间:2019-05-22 18:28:09

标签: powershell command output line

从Python脚本(subprocess.Popen调用Powershell时,我正在遍历AD域控制器的列表。对于每个无法识别AD对象的控制器,我想抑制错误的输出。

在Powershell命令末尾使用| Out-Null无效。

Python脚本:

for server in ADDomainList:
    cmd = 'powershell.exe get-ADComputer ' + hname + ' -Server ' + server + ' | Out-Null'
    subprocess.call(cmd)

从Powershell命令行:

get-ADComputer computer-name -Server server.domain.com

不需要的输出:

Get-ADComputer : A positional parameter cannot be found that accepts argument '?'.
At line:1 char:1
+ get-ADComputer computer-name -Server server.domain.com ?
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ADComputer], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

返回代码0或1的结果是我接下来的执行步骤所需要捕获的全部。我不希望任何输出到控制台。

2 个答案:

答案 0 :(得分:0)

*> $null一样将所有流重定向为null。这将导致没有输出。

cmd = 'powershell.exe get-ADComputer ' + hname + ' -Server ' + server + ' *> $null'

如果您希望通过管道传输到Out-Null或任何其他cmdlet,还可以将所有输出重定向到成功流,并通过管道传输到另一个cmdlet,如下所示:

cmd = 'powershell.exe get-ADComputer ' + hname + ' -Server ' + server + ' *>&1 | Out-Null'

Here is some more information about redirection in Powershell.

答案 1 :(得分:0)

这是另一个利用PowerShell的解决方案 “试一试”功能。通过循环使用此错误 消除了响应。

我使用PowerShell尝试捕获所需的服务器

async

一旦我拥有正确的服务器,我就使用'|消灭掉 默认的PowerShell输出。

Future<int> f1() async => 1;
Future<int> f1() => Future.value(1);

Future<void> f2() async {
  throw Error();
}
Future<void> f2() {
  return Future.error(Error());
}