gpt4 book ai didi

powershell - Powershell ForEach循环间歇性工作-工作,失败,工作,失败,工作等

转载 作者:行者123 更新时间:2023-12-02 23:54:25 28 4
gpt4 key购买 nike

我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。

我有这个:

$ix = [System.Net.Dns]::GetHostEntry('<some server with a range of multiple IP addresses here>).AddressList.IPAddressToString;
$e = If ($ix -ne $null) {$ix | % { $_.split('.')[0..1] -join '.'} | % {$_ + '.'}} ;
$r = Get-NetRoute | ? AddressFamily -eq 'IPv4' | Select -exp 'DestinationPrefix'; ForEach ($e in $e) {$xline = $r -match $e}; write $xline

$ ix是从服务器返回到列表中的IP地址范围,然后进行操作以获得$ e。

$ e是从IP地址列表派生的每个IP地址的前两个八位字节的列表。

$ r是路由表的IPv4地址

目的是将$ e中IP地址的前两个八位字节与$ r中IP地址的前两个八位字节进行匹配,然后用$ xline返回匹配的$ r路由表IP地址。这将按预期工作,直到不再工作为止。

问题是它可以正常工作,然后突然不再工作,因为即使$ ix,$ e和$ r值仍被填充并且它们的相关代码也可以正常工作,但是$ xline变成空的。尝试几次后,它将再次开始尝试几次,然后停止工作。我不知道我在做什么错,或者这是否是解决问题的正确方法,但我喜欢它的相对简单性。任何帮助,将不胜感激。谢谢。

最佳答案

尝试以下操作(我对代码进行了一些重新格式化,以便更清楚地进行故障排除):

$ix = [System.Net.Dns]::GetHostEntry($env:COMPUTERNAME).AddressList.IPAddressToString;

$e = If ($ix -ne $null) {
$ix | ForEach-Object { ( $_.split('.')[0..1] -join '.') + '.' }
}

$r = Get-NetRoute | Where-Object { $_.AddressFamily -eq 'IPv4' } | Select-Object -ExpandProperty 'DestinationPrefix'

$xline = ForEach ($f in $e) {
$r -match $f
}

$xline

主要变化是将 $line设置为 ForEach循环中返回的所有值,而不是最后一个。

另外,我还删除了不必要的 ForEach-Object,因为您可以执行它在较早版本中实现的功能。

以下是您简短格式的修复程序:
$ix = [System.Net.Dns]::GetHostEntry('<some server with a range of multiple IP addresses here>').AddressList.IPAddressToString;
$e = If ($ix -ne $null) {$ix | % { ($_.split('.')[0..1] -join '.') + '.'} ;
$r = Get-NetRoute | ? AddressFamily -eq 'IPv4' | Select -exp 'DestinationPrefix'; $xline = ForEach ($e in $e) { $r -match $e}; write $xline

关于powershell - Powershell ForEach循环间歇性工作-工作,失败,工作,失败,工作等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48947407/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com