如何解决Powershell:每次从函数运行时都会添加数据的函数
我知道我做错了事,但是我被卡住了……我正在通过串行连接到Cisco设备,然后每次发送命令时,我都可以通过键入$port.ReadExisting()
来读取输出。我需要能够运行许多命令,填充缓冲区,然后从端口获取输出。我必须检查以确保首先要阅读一些东西,这就是为什么我将其放在可以被一遍又一遍调用的函数中的原因。
每次调用时,$Comreply
都会被清除。我该如何获取Comreply
中的内容,添加$port.ReadExisting()
,并让Comreply
吐出所有已写的内容?...
Function WaitForReply {
while ($port.BytesToRead -gt 0){
$Comreply += $($port.ReadExisting()) + "`n"
}
}
我还应该如何调用我的函数?...我应该只用WaitForReply
来调用它吗?还是应该用$AllMyReplies = WaitForReply
设置一个等于它的变量?
解决方法
这是由于在与其他scope中的变量进行交互时PowerShell的写时复制行为。
如果在变量名前加上$COMReply
或script:
范围限定符(即{{1 }}。
...但是解决此问题的 real 方法是避免读取,更重要的是写入跨范围变量边界。
为避免这种情况,您需要:
- 将所有需要的输入声明为参数
- 按原样输出结果,而不是写入函数外部的变量
如果这样做,我们将得到如下结果:
global:
这为我们的函数提供了一个很好的 clean 表面-该函数不依赖于能够从调用范围中发现$script:COMReply += ...
,并且function Wait-ForReply($Port){
while($Port.BytesToRead -gt 0){
$Port.ReadExisting()
}
}
不受什么影响继续在函数内部。
现在,您只需执行以下操作即可在调用范围中添加或连接到$port
:
$COMReply
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。