.net - Powershell 卸载模块...完全

标签 .net powershell

我正在调试 Powershell 项目。我正在使用 Import-Module 从我的 C# dll 加载 PS 模块,一切正常。尽管调用 Remove-Module 并不会完全卸载模块,因为 DLL 仍处于锁定状态且无法删除。

有没有办法让 PSH 完全卸载模块并释放 DLL,以便我可以复制它并使用 Import-Module 重新加载它,而无需重新启动 PSH 控制台?

更新
因此,如果将模块加载到单独的 AppDomain 中,它仍然像普通模块一样工作吗?谁能举个例子吗?

最佳答案

有一个解决方法。打开 PowerShell 的另一个实例:

PS > powershell
PS > [load DLL]
PS > [do work]
PS > exit

退出后,您将返回到进行此调用的 PowerShell 实例(假设您在 PowerShell 实例内部进行了 powershell 调用)。您可以将任何常规参数传递给 powershell,因此您可以使用 -Command 或 -File。例如,

PS > powershell -Command '[load DLL]; [do work]' # Executes a command and exits
PS > powershell -Command '.\myscript.ps1 param1 param2' # Executes the script and exits
PS > powershell -File .\myscript.ps1 param1 param2 # Executes a script and exits.

当 PowerShell 退出时,它将释放 DLL 上的锁定,允许您继续工作。

所有这些都是通过 PowerShell 命令行界面完成的。我尚未测试如果您在脚本中间添加 powershell 或这在 ISE 中是否有效,会发生什么情况。 (我怀疑它可以在 ISE 中工作。)即使在脚本中不起作用,这在开发过程中仍然有用。

编辑:

做了一些检查。因此,这似乎在脚本和 ISE 中工作得很好,但 ISE 中有一个警告。在 ISE 中,当您处于单独的 PowerShell 进程中时,您无法读取用户的任何输入。如果您尝试,脚本或命令会停止等待,但不会像平常一样显示输入框,当然,您无法直接在 ISE 的输出窗口中键入内容。因此,如果您需要在[do work]中间提示输入,请在before启动PowerShell的新实例之前提示,并将其作为参数传递到work中。如果您使用常规 PowerShell 命令行,这些根本不是问题。

关于.net - Powershell 卸载模块...完全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337961/

相关文章:

java - Powershell 脚本无法在 Java 代码中运行

.net - 设置个人 .NET Web 开发环境的最简单方法是什么?

c# - 如何在 C# 中获取两个字符串数组之间的差异?

powershell - 如何在范围结束时自动调用 Pop-Location

windows - 未找到 PowerShell 包管理

powershell - 以编程方式启用 Windows 10 开发者模式

c# - 在 WPF 中关闭标签的最佳实践

c# - WPF:关闭和打开窗口

c# - 异步方法是否必须使用 "await"关键字?

powershell - 如何将键盘焦点设置到 Powershell 中的 TextBox