.net - 如何使用 .net 方法在 powershell for 循环中重定向 stderr

标签 .net powershell error-handling

我正在编写一个脚本,该脚本将获取所有加入域的计算机的列表,以便我的脚本可以远程访问它们并跨域执行命令,但是我正在运行的系统无法访问事件目录模块。我的解决方案是使用 .net 方法来查询信息,但我在脚本中遇到重定向到 null 的错误。我得到的是当代码执行时,如果系统未启动,我将收到错误“找不到网络路径”。我需要将这些错误发送为 null,但无论我将重定向放在哪里,我仍然会收到错误。问题是这些错误将导致脚本的其余部分停止工作。
这是我用于查找域计算机的代码:

$Domainmachines = (([adsi]"WinNT://$((Get-WMIObject Win32_ComputerSystem).Domain)").Children) | Where {$_.schemaclassname -eq 'computer'} 
Foreach( $machine in $Domainmachines) {
    Select-Object -ExpandProperty Name -InputObject $machine 

} 2>$null

我尝试将“2>$null”放在 select-object 命令之后的变量中,如 for 循环外部所示。我还尝试将所有内容保存到变量中,在变量末尾添加“2>$null”,在 for 循环内,然后将内容写入屏幕,但它仍然将所有错误打印到屏幕上并导致要挂起的脚本。

最佳答案

重定向运算符仅在卡在管道末尾时起作用 - foreach($thing in $collection){} 循环语句不是有效的管道元素。

要解决这个问题,您可以将整个内容包装在脚本 block 中并对其进行点源:

. {
    $Domainmachines = (([adsi]"WinNT://$((Get-WMIObject Win32_ComputerSystem).Domain)").Children) | Where {$_.schemaclassname -eq 'computer'} 
    Foreach( $machine in $Domainmachines) {
        Select-Object -ExpandProperty Name -InputObject $machine 

    } 
} 2>$null

关于.net - 如何使用 .net 方法在 powershell for 循环中重定向 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48526109/

相关文章:

.net - 序列化的 NHibernate 配置对象 - 检测过时或按需重建?

.net - ASPNET 编译器 : error ASPRUNTIME: Target Directory not empty

c# - .Net 获取 DateTimeFormat "G"

Powershell:在 Format-Table 格式中为 Select-Object 中的列值右对齐

android - 有没有一种方法可以捕获所有错误而又不会在try语句中乱扔我的代码?

javascript - 这应该是什么类型的错误?

c# - Wcf服务操作契约变更

powershell - 以 24 小时格式显示 [datetime] 对象

powershell - 在边缘版本的远程计算机上使用 powershell

c - 如何在 C 中仅读取输入中的数字(没有字母,只有数字)?