1

我無法發佈所有腳本競爭者,但基本思想是它下載JSON並使用ConvertFrom-Json cmdlet將其轉換爲對象。一些對象被過濾掉,剩下的則被寫入XML/XLS文檔(採用Excel 2003格式)。然後這個文件被附加到一封電子郵件併發送給不同的人。我的PowerShell腳本僅在從ISE運行時才起作用

我遇到的問題是,它只適用於從Powershell ISE運行。一旦我嘗試設置一個計劃任務,從cmd調用它,甚至從powershell調用它,附加文件是完全空的。就好像某些函數不運行(循環並創建所有行)。

我可以暫時從ISE繼續運行,但是這個腳本的想法是發送一個自動郵件,不需要干預。任何想法可能會導致這種情況?

+2

您需要找出中斷髮生的位置。您的計劃任務是否運行PoSH v2或v3?你說「這就好像有些功能不運行」 - 你需要**測試這個**!在每個函數中寫入一條語句,寫出一個日誌文件,指出該函數已輸入。我們這裏確實沒有足夠的診斷。你在Windows事件日誌中得到了什麼? – alroc

+1

如果它無法從Powershell調用它,那麼通過點源(。./script.ps1)在本地範圍內運行它。這將使所有變量駐留在會話中,並且您可以開始檢查它們以查看它掉落的位置。 – mjolinor

+0

我能夠得到它的工作。原來,我使用在腳本中稍後定義的另一個變量定義了一個變量。移動之後,它又開始工作了。謝謝! – EGr

回答

0

我有這個問題,併爲我執行使用powershell單線程函數工作的腳本。 您也可以嘗試一些其他選項,請轉至此link以查找更多信息。

powershell.exe -noexit c:\test.ps1 -sta 
+0

我試過了,並沒有奏效。 – EGr

2

根據評論對原文的回答,似乎腳本是(意外地)在ISE中工作的,因爲bug/quirk /功能允許在ISE中運行的腳本知道變量在控制檯窗口中使用,反之亦然。

當腳本運行時已經定義了變量(並且未在腳本中仔細初始化),這通常會導致邏輯問題或意外結果。

方法來避免這個問題:

  • 嘗試測試在清潔的環境中儘可能你的代碼。

http://powershell.com/cs/blogs/tips/archive/2015/02/12/getting-a-clean-powershell-environment.aspx

要確保腳本在一個完全乾淨的測試環境下運行,你 當然可以重新啓動的PowerShell ISE。更方便的方法是 打開另一個PowerShell選項卡:在PowerShell ISE中,選擇文件/新建 PowerShell選項卡。

  • 使用Set-StrictMode 2在你的腳本來捕獲不確定的變量等

https://technet.microsoft.com/en-us/library/hh849692.aspx

Set-StrictMode -Version 2.0

  • 禁止未初始化的變量(包括字符串中未初始化的變量)的引用。
  • 禁止引用對象的不存在的屬性。
  • 禁止使用語法調用方法的函數調用。
  • 禁止沒有名稱的變量($ {})。
相關問題