Test-NetConnection会产生不一致的结果

时间:2018-01-28 04:11:33

标签: c# powershell

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

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

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

命令:

Test-NetConnection -ComputerName 'D123' -InformationLevel Detailed

D123是同一网络上的Windows 7 VM

下面你可以看到两个结果,似乎有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上运行时命令显示的内容。

我想知道的是它返回如此多的值的原因,从它的外观来看,它为命令中的所有成员返回结果而不仅仅是op级别的值(如果这有意义,请看这里:{ {3}}),但我完全不知道为什么。

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

EDIT2 :似乎更多细节来自于向命令添加“| select *”,这很奇怪,因为我的代码都没有这样做,并且它获得了50%的额外细节当时。

1 个答案:

答案 0 :(得分:0)

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

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

不确定为什么会发生这种情况,但从Powershell输出中选择特定属性会更加一致,所以对于任何看过这个问题的人我都建议像Veefu在评论中所做的那样。