通过 PSEXEC 启动脚本时循环的 Powershell 菜单(通过 CMD 返回显示)

Powershell menu that loops when the script is launched via PSEXEC (with display return via CMD)

提问人:Manios 提问时间:11/15/2023 更新时间:11/15/2023 访问量:28

问:

我们有 Powershell 脚本,这些脚本通过专用工具(和 PSEXEC)在远程工作站上运行。 所有反馈(消息、错误)都在 CMD 窗口中给出。 问题在于,当脚本使用菜单(通过“Read-Host”+“Switch”)时,此菜单有时会无休止地循环。 CMD 发送数据,Powershell 将其解释为用户选择,因此,它进入“Switch”的“默认”部分并无休止地这样做。

$choix2 = Read-Host "Faire un choix : O/N"
switch ($choix2) {
    O {
        Action
    }
    N {
        Action
    }
    default {
        Write-Host "Invalid choice"
        Pause
    }
}

在“默认”中,“PAUSE”命令用于限制此问题。当 CMD 发送数据时,“暂停”停止,用户可以输入选项。但有时它不起作用,菜单会循环回“默认”。

我想知道是否有更实用的方法可以完全纠正这个问题。要完全删除由 cmd 发送的“寄生”数据,它阻止我使用 Powershell 菜单。

问候

PowerShell 循环 switch-statement 默认 读取主机

评论

0赞 jdweng 11/15/2023
运算可以输入小写字母、空格或多个字母。您的代码只查找两个字符 O 或 N。 尝试:switch ($choix 2。Trim() 中。ToUpper() 中。子字符串(1))
0赞 mklement0 11/15/2023
@jdweng,提示很有帮助,但不需要: 默认情况下,PowerShell 通常不区分大小写,也不例外。.Trim().ToUpper()switch
0赞 Manios 11/15/2023
我的问题是发送响应的不是用户,而是 CMD 解释器。有时,用户没有时间选择响应,它会直接进入“默认”。如果可能的话,我想过滤掉这种“寄生”CMD 响应。
1赞 lit 11/15/2023
如果脚本由专用工具或 PSEXEC 远程运行,则它从哪里获取输入?远程系统上是否有用户会话?我确信使用私有工具和 PSEXEC 是有原因的,但使用 PowerShell Remoting 可能更可持续。
0赞 Manios 11/15/2023
我完全同意你的看法,但安全部门尚未验证 PowerShell Remoting 的使用(令我遗憾的是)。简单地说: 1.该工具将Powershell脚本复制到本地,在远程计算机上。2. 使用 PSEXEC 运行 cmd,然后执行脚本。3. 脚本的结果从远程计算机发送到 cmd。这是它阻止的地方,在菜单期间,有时,用户不做任何事情,就会做出选择。可能是由 CMD 解释器提供的。结果,您又回到了“默认”状态。

答: 暂无答案