Windows-7

Powershell VMWare 腳本未從計劃任務執行

  • January 28, 2013

背景/目標

我正在嘗試創建一個計劃任務,該任務將:

  • 在指定時間執行(一次)

  • 執行 PowerShell 腳本:

    • 將其所有輸出記錄為成績單
    • 使用加密的儲存憑據連接到我的 vCenter 伺服器
    • 關閉特定文件夾中所有 VM 的來賓作業系統

問題

該腳本從控制台完美執行,但甚至沒有開始作為任務執行。

編碼

#Stop an error from occurring when a transcript is already stopped
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null

#Reset the error level before starting the transcript
$ErrorActionPreference="Continue"
Start-Transcript -path C:\temp\Shutdown_NonProductionVMs.log -append

#Add the VMWare Snap-in
Add-PSSnapin -Name VMWare.VimAutomation.Core

#Get the Credentials
$creds = Get-VICredentialStoreItem -file  C:\temp\pscreds.creds

#Connect to the server using the credentials file
Connect-VIServer -Server $creds.host -User $creds.User -Password $creds.Password

#Get all VMs within the non-production VMs folder and then shut them down
#NOTE the -WhatIf tag, which will stop it from shutting down the VMs until we're sure the script is good.

Get-Folder -Name "03. Non-Production VMs" | Get-VM | Shutdown-VMGuest -WhatIf

#Clean Up
Disconnect-VIServer -Force -Confirm:$false
Remove-PSSnapin -Name VMWare.VimAutomation.Core
Stop-Transcript

到目前為止我檢查過/嘗試過的內容和其他線索

  • 同樣,當控制台以管理員身份打開時,此腳本在控制台中執行得非常好。
  • 我已經設置了“無限制”的機器級執行策略,看看是否有幫助。
  • 我正在以創建憑據文件的同一使用者身份執行任務
  • 我正在以最高權限執行任務。
  • 我正在使用儲存的憑據執行任務(我的使用者憑據——與控制台相同的憑據)。
  • 我嘗試註釋掉與成績單相關的程式碼,看看是否這樣做了;沒有骰子。
  • 該任務只是繼續永久執行。我沒有得到任何結果,也沒有終止。

有任何想法嗎?提前感謝您提供的任何幫助!

如果您在互動式“控制台”會話中啟動 Powershell,您很可能會啟動 64 位版本的 Powershell。(執行檔將位於 Windows\System32 中。)您還可以通過執行位於 Windows\SysWOW64 中的版本從 64 位 Windows 啟動 32 位 Powershell。確保您知道任務計劃程序正在啟動哪個版本。

請記住,每個版本的 Powershell 都有一個完全獨立的執行策略。所以你需要設置兩次執行策略來覆蓋 32 位和 64 位版本的 Powershell。

您嘗試載入的管理單元也很重要。某些管理單元和 COM 對像只能在 32 位或 64 位環境中載入。但是,我剛剛在安裝了 PowerCLI 的 Server 2008 R2 伺服器上進行了測試,載入您在兩種環境中引用的管理單元都沒有問題。所以我不認為這是這裡的問題。但這仍然需要考慮。它可能取決於您安裝的 PowerCLI 版本。確保從 32 位和 64 位 PS shell 載入管理單元。

最後,您能否準確地告訴我們您計劃任務中的操作螢幕顯示的內容?您正在執行什麼確切的命令行(帶參數)?如果您執行類似的東西,您可能會獲得更多調試資訊cmd /c powershell.exe c:\yourscript.ps1 2>&1> C:\debug.txt

它也可能有助於為我們提供Get-ExecutionPolicy -List32 位和 64 位環境的輸出。

在您的文章中您還提到:

該任務只是繼續永久執行。我沒有得到任何結果,也沒有終止。

這通常表明它正在等待使用者輸入。

編輯:錯別字,錯別字無處不在

引用自:https://serverfault.com/questions/473072