2013-09-26 137 views
6

我正在使用Windows PowerShell ISE編寫我的PowerShell腳本。當我更改腳本中的某些內容並運行該腳本時,不會執行最後保存的腳本版本,而是執行較舊版本的腳本。只有當我第二次運行腳本時,它纔會使用當前版本。我能做些什麼來始終運行最新版本的腳本?運行舊版本的Windows PowerShell ISE

回答

1

編輯完成後,您需要再次通過點源採集腳本。假設你有一個在當前目錄中名爲MyScript.ps1文件,在控制檯中運行以下命令:

. .\MyScript.ps1 

如果你想在腳本中調用特定的功能,那麼你可以這樣做:

. .\MyScript.ps1 
MyFunction 
1

這是一個非常古老的問題,但我認爲我偶然發現了同樣的問題。在我的情況下,我在調用它之後定義了一個函數。它似乎工作,但只是因爲「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} 
0

我用的舊文件ISE 「緩存」 的經驗:

ISE的行爲是PS模塊的不同(名爲.psm1)和簡單的PS腳本(PS1)。我在Win10Pro上使用PS & ISE。

A) 我與模塊(PSM1)

  1. 加載模塊文件 「hello.psm1」 已經放在一個適當的模塊中的經驗 目錄 「C:\用戶\ MyUserName輸入\文檔\ WindowsPowerShell \模塊\你好運行選擇」通過 ISE
  2. 通過執行函數‘’(你可能不執行 模塊‘運行腳本’)
  3. 修改文件,如 函數'Write-Host'Hello World!''輸出到'Write-Host'Hello''並保存 文件。
  4. 通過「運行選擇」執行一個功能,它將執行帶有舊輸出的舊功能 。 「你好,世界!」。這也是如果我重複「運行選擇」命令 。
  5. 只要我離開ISE並重新加載它,新功能就由「運行選擇」執行。

B) 我的腳本經驗(.PS1)。

  1. 如果我執行「運行選擇」,與模塊的行爲相同。
  2. 如果我執行一次「運行腳本」並通過該函數被調用,則執行該函數的當前版本。當然,我在文件「之後」定義的文件中(例如在第10-20行中)調用函數(例如在行號100上)。由此,不存在緩存。
  3. 特別是因此,如果我執行一次「運行腳本」,而執行的代碼不調用該函數,然後通過「運行選擇」執行我的功能,則執行該函數的當前版本。

C) 這裏是我的解決方法,以使模塊開發更加舒適:

  • 簡單的腳本可以通過「運行腳本」執行。
  • 如果我想開發一個模塊(.PSM1),我在開發階段將其命名爲簡單腳本(.PS1)。我將文件(例如「hello.ps1」)已經放置在 正確的模塊文件夾中,例如, 「C:\ Users \ MyUserName \ Documents \ WindowsPowerShell \ Modules \ Hello」爲模塊「Hello」。當然,我不能通過PowerShell控制檯執行模塊功能的功能。我只是想使用ISE來調用函數進行測試。
  • 由於模塊不作爲腳本執行,文件中沒有可執行代碼,只是函數(AFAIK)。所以我可以安全地在腳本上執行「運行腳本」。

因此,如果我在ISE開發下修改模塊文件,在執行「運行選擇」功能之前,我總是先執行「運行腳本」。

通過這個,我總是執行一個函數的當前版本。

雖然我的問題有點不同,但這個問題和答案對我找到解決方案非常有幫助。很難找到有關ISE「緩存」的問題以及如此有用的答案。

真誠 Rolf

相關問題