【发布时间】:2013-10-02 03:36:53
【问题描述】:
我正在使用 Windows PowerShell ISE 编写我的 PowerShell 脚本。当我更改脚本中的某些内容并运行脚本时,不会执行最后保存的脚本版本,而是执行旧版本。仅当我第二次运行该脚本时,它才会使用当前版本。我该怎么做才能始终运行最新版本的脚本?
【问题讨论】:
我正在使用 Windows PowerShell ISE 编写我的 PowerShell 脚本。当我更改脚本中的某些内容并运行脚本时,不会执行最后保存的脚本版本,而是执行旧版本。仅当我第二次运行该脚本时,它才会使用当前版本。我该怎么做才能始终运行最新版本的脚本?
【问题讨论】:
这是一个非常古老的问题,但我想我偶然发现了同样的问题。就我而言,我在调用它之后定义了一个函数。它似乎可以工作,但这只是因为“myfunc”仍然具有上一次调用的值。如果更改“Hello, World!”,您会发现新值仅在第二次尝试时生效。
Invoke-Command -ScriptBlock ${function:myfunc}
function myfunc() {
Write-Host "Hello, World!"
}
要解决此问题,只需在您尝试调用它之前定义该函数。
function myfunc() {
Write-Host "Hello, World!"
}
Invoke-Command -ScriptBlock ${function:myfunc}
【讨论】:
进行编辑后,您需要通过点源再次获取脚本。假设您在当前目录中有一个名为 MyScript.ps1 的文件,请在控制台中运行以下命令:
. .\MyScript.ps1
如果您想在脚本中调用特定函数,那么您可以这样做:
. .\MyScript.ps1
MyFunction
【讨论】:
我对 ISE“缓存”旧文件的体验:
对于 PS 模块 (.psm1) 和简单的 PS 脚本 (ps1),ISE 的行为是不同的。我正在将 PS&ISE 与 Win10Pro 一起使用。
一) 我的模块经验 (. PSM1)
B) 我的脚本经验 ( .PS1 )。
C) 这是使模块开发更舒适的解决方法:
所以如果我在 ISE 开发下修改模块文件,我总是先执行“运行脚本”,然后再通过“运行选择”执行功能。
这样我总是执行当前版本的函数。
虽然我的问题有点不同,但这个问题和答案对我找到解决方案很有帮助。很难找到有关 ISE“缓存”的此类问题以及如此有用的答案。
真诚的 罗尔夫
【讨论】: