kubectl exec 命令在 powershell ISE 中不起作用(在 powershell 中起作用)- 是否有理由或解决方法使其起作用?

kubectl exec command not working from powershell ISE (works from powershell) - Is there a reason or workaround to make it work?

我最近开始使用 Kubernetes 和 Docker,但对它的工作原理还是陌生的。我已经制作了一个 ps1 脚本来 运行 在 Kubernetes 上构建图像和执行图像所需的所有步骤。

我看到的是所有步骤在 ISE 上都运行良好(除了这个:"kubectl exec -it test-runner pwsh")。仅对于这一步,我就必须 运行 在另一个 PowerShell window 上执行它。

当我在 ISE 中 运行 这一步时,脚本保持 运行ning 而不会给出任何错误或停止。

有谁知道在 ISE 上工作的 Kubernetes 是否有限制,或者是否有解决方法让它工作?

使用 ISE 很快,为我节省了大量时间,所以当我每次都必须在单独的 PowerShell 中复制、粘贴、输入时,这真的很重要 window。

在此先感谢您的帮助!

P.S:我查看了其他建议的类似 questions/answers 和 none,其中似乎与不在 ISE 上运行的 Kubernetes 有关。因此这个问题。

命令:

kubectl exec -it test-runner pwsh

预期(当从 PowerShell 控制台 运行ning 时实际):

----------------------
PS C:\windows\system32> kubectl exec -it test-runner pwsh
PowerShell 6.2.2
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

PS /test>
-----------------------------
Actual (when running from PowerShell ISE):

PS C:\SourceCodeTLM\Apollo>  kubectl exec -it test-runner pwsh
PowerShell 6.2.2
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

(with a blinking cursor and script running without breaking and changing to the new path)...
-----------------------------------------------

PowerShell ISE 不支持 interactive 控制台应用程序,这尤其意味着您无法从中启动其他 shell

ISE 试图通过拒绝启动众所周知的 shell 来预测该问题。 例如,尝试启动 cmd.exe 失败并显示以下错误消息:

Cannot start "cmd". Interactive console applications are not supported. 
To run the application, use the Start-Process cmdlet or use 
"Start PowerShell.exe" from the File menu.

注:

但是,ISE 不可能检测到给定命令(最终)调用交互式控制台应用程序的所有情况;如果没有,则尝试调用命令,导致模糊的错误消息,或者像您的情况一样挂起。

正如错误消息所暗示的那样,您必须 运行 交互式控制台应用程序 ISE 之外,在常规控制台 window 中。

从 ISE 您可以使用 Start-Process 在新的常规控制台中启动程序 window;在手头的案例中:

Start-Process kubectl 'exec -it test-runner pwsh'

或者、运行 您在 ISE 之外的 PowerShell 会话开始,例如在常规控制台 window、Windows 终端, 或者在 Visual Studio 代码的集成终端中。

深入挖掘后,我找到了一种与交互式控制台应用程序进行交互的方法。

我们可以SendKeys('key_here')具体应用。

您可以从 PowerShell 打开命令 window,然后发送命令打开 shell。

Start-Process PowerShell -Wait "-NoProfile -ExecutionPolicy Bypass -Command `"kubectl exec helloworld-web-8495f4c888-jw2tg -n local-v1 -it -- /bin/bash`""