【问题标题】:Test-NetConnection gives inconsistent resultsTest-NetConnection 给出不一致的结果
【发布时间】:2018-01-28 04:11:32
【问题描述】:

今天遇到一个有趣的问题。

我有一堆 C# 代码通过 RunspacePool 创建使用 Powershell。 我给它输入命令,如果你自己运行 Powershell,它会准确输出 Powershell 会输出的内容,每一行都是 List 中的一个新条目。

奇怪的是,今天在程序中尝试“Test-NetConnection”命令时,结果不一致。

命令:

Test-NetConnection -ComputerName 'D123' -InformationLevel Detailed

D123 是同一网络上的 Windows 7 虚拟机

您可以在下面看到两个结果,似乎有 50% 的机会获得其中一个:

Count = 32
[0]: "ComputerName             : D123"
[1]: "RemoteAddress            : fe80::9503:8d01:d690:6c0a%14"
[2]: "PingSucceeded            : True"
[3]: "PingReplyDetails         : System.Net.NetworkInformation.PingReply"
[4]: "TcpClientSocket          :"
[5]: "TcpTestSucceeded         : False"
[6]: "RemotePort               : 0"
[7]: "TraceRoute               :"
[8]: "Detailed                 : True"
[9]: "InterfaceAlias           : Internal"
[10]: "InterfaceIndex           : 14"
[11]: "InterfaceDescription     : Intel(R) 82574L Gigabit Network Connection #2"
[12]: "NetAdapter               : MSFT_NetAdapter (CreationClassName = "MSFT_NetAdapter", DeviceID ="
[13]: ""{FDA85168-53B0-4F24-ABEB-BDC9F3A29958}", SystemCreationClassName = "CIM_NetworkPort","
[14]: "SystemName = "WIN-IAJUP1S3FL9.testdomain.com")"
[15]: "NetRoute                 : MSFT_NetRoute (InstanceID = "poB:DD9@?55"
[16]: "?55DD55"
[17]: "")"
[18]: "SourceAddress            : MSFT_NetIPAddress (Name = "poB:DDl:pBD?:lDpC:mDmp?o/"
[19]: "?55"
[20]: "?55"
[21]: "55"
[22]: "", CreationClassName = "","
[23]: "SystemCreationClassName = "", SystemName = "")"
[24]: "NameResolutionSucceeded  : True"
[25]: "BasicNameResolution      : {}"
[26]: "LLMNRNetbiosRecords      : {}"
[27]: "DNSOnlyRecords           : {}"
[28]: "AllNameResolutionResults :"
[29]: "IsAdmin                  : True"
[30]: "NetworkIsolationContext  : Private Network"
[31]: "MatchingIPsecRules       :"

或者

Count = 9
[0]: "ComputerName             : D123"
[1]: "RemoteAddress            : fe80::9503:8d01:d690:6c0a%14"
[2]: "AllNameResolutionResults : 172.16.0.10"
[3]: "fe80::9503:8d01:d690:6c0a"
[4]: "InterfaceAlias           : Internal"
[5]: "SourceAddress            : fe80::b0f8:20b:f90c:cf3e%14"
[6]: "NetRoute (NextHop)       : ::"
[7]: "PingSucceeded            : True"
[8]: "PingReplyDetails (RTT)   : 0 ms"

第二个块是它应该返回的内容,也是在 Powershell 上运行时命令显示的内容。

我想知道的是为什么它会返回这么多值,从外观上看,它会返回命令中所有成员的结果,而不仅仅是操作级别的成员(如果有意义,请看这里:@ 987654321@),但我完全不知道为什么。

EDIT1:输出块是来自 Visual Studio 的复制+粘贴,因此 Count = 32 是 Powershell 传回的行数,[number] 是列表位置。

EDIT2:似乎更多的细节来自在命令中添加“| select *”,这很奇怪,因为我的代码都没有这样做,它得到了 50% 的附加细节时间。

【问题讨论】:

  • 您正在运行的确切命令是什么?您的第一个块看起来像“Test-NetConnection -ComputerName 'D123' -InformationLevelDetailed | Select *”的输出。但是“Count = 32”是从哪里来的?
  • 对不起,我应该说。 Count = 32 来自 Visual Studio,块中的文本是从 Powershell 传回的结果的复制+粘贴。所以 [number] 是 List 的位置。编辑:啊哈,似乎更多细节来自添加“| select *”,但它是随机发生的。
  • 嗯,这感觉有点麻烦。如果您想进一步诊断,请发布您用于执行 PowerShell 代码的最少量 C# 代码,并尝试在最简单的情况下重现。同时,您可以尝试添加 Select-Object -property <#properties you want#> 并查看是否可以解决问题。
  • 嗨@veefu,感谢您的建议。经过进一步调查,如果我将命令放入主窗口加载事件中,那么所有后续的都搞砸了,如果我从主窗口加载事件中删除它,那么它工作正常。不知道发生了什么,但我会看到有关获取特定属性的信息,以便更加一致。

标签: c# powershell


【解决方案1】:

感谢 Veefu 和 John 的帮助,我更多地研究了我的代码。

不确定它为什么这样做,但是每当我在主窗口加载事件中运行 Powershell 代码时,它都会影响同一 Powershell 命令的所有后续执行。 当移动到代码的不同部分时,它的行为符合预期。

不确定为什么会发生这种情况,但从 Powershell 输出中选择特定属性更加一致,因此对于看到此问题的任何人,我建议按照 Veefu 在 cmets 中所说的那样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2013-04-30
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多