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

标签 powershell

我在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/

相关文章:

PowerShell FTP 上传

windows - Windows Powershell 中的 Mercurial 颜色扩展

git - git rebase时进入VIM时如何开始打字?

c# - 在不修改属性的情况下复制文件夹/文件?

powershell - 在带有 Powershell 的 Internet Explorer 中使用模式对话框

azure - 如何使用 Powershell 更新 Azure 资源模板部署的参数

amazon-web-services - 将 Powershell 数组转换为文本,以便将其导出为 CSV 或 HTML

c# - 由于 applicationHost.config 无效,.Net 构建失败

azure - 样板凭证代码,跨阶段、步骤、工作共享的方式?

python - 使用 powershell 脚本自动化网站验证测试?