我正在编写一个脚本,该脚本将获取所有加入域的计算机的列表,以便我的脚本可以远程访问它们并跨域执行命令,但是我正在运行的系统无法访问事件目录模块。我的解决方案是使用 .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/