微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell:每次从函数运行时都会添加数据的函数

如何解决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的写时复制行为。

如果在变量名前加上$COMReplyscript:范围限定符(即{{1 }}。

...但是解决此问题的 real 方法是避免读取,更重要的是写入跨范围变量边界。

为避免这种情况,您需要:

  1. 将所有需要的输入声明为参数
  2. 按原样输出结果,而不是写入函数外部的变量

如果这样做,我们将得到如下结果:

global:

这为我们的函数提供了一个很好的 clean 表面-该函数不依赖于能够从调用范围中发现$script:COMReply += ...,并且function Wait-ForReply($Port){ while($Port.BytesToRead -gt 0){ $Port.ReadExisting() } } 不受什么影响继续在函数内部。

现在,您只需执行以下操作即可在调用范围中添加或连接到$port

$COMReply

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。