web-dev-qa-db-ja.com

PowershellVMWareスクリプトがスケジュールされたタスクから実行されていない

背景/目標

次のようなスケジュールされたタスクを作成しようとしています。

  • 指定された時間に実行(1回)
  • 次のようなPowerShellスクリプトを実行します。
    • すべての出力をトランスクリプトとしてログに記録します
    • 暗号化されて保存された資格情報を使用してvCenterサーバーに接続します
    • 特定のフォルダー内のすべてのVMのゲストOSをシャットダウンします

問題

スクリプトはコンソールから完全に実行されますが、タスクとして実行を開始することすらありません。

コード

#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

私がこれまでにチェック/試したことと他のリード

  • この場合も、コンソールを管理者として開いたときに、このスクリプトはコンソールで完全に正常に実行されます。
  • 「無制限」のマシンレベルの実行ポリシーを設定して、それが役立つかどうかを確認しました。
  • 資格情報ファイルを作成したのと同じユーザーとしてタスクを実行しています
  • 最高の権限でタスクを実行しています。
  • 保存された資格情報(ユーザー資格情報-コンソールから機能するものと同じもの)を使用してタスクを実行しています。
  • トランスクリプト関連のコードをコメントアウトして、それがうまくいくかどうかを確認してみました。サイコロはありません。
  • タスクは永続的に実行され続けます。結果が得られず、終了しません。

何か案は?あなたが与えることができるどんな助けにも前もって感謝します!

2
SeanKilleen

インタラクティブな「コンソール」セッションでPowershellを起動すると、64ビットバージョンのPowershellが起動する可能性が高くなります。 (実行可能ファイルはWindows\System32にあります。)Windows\SysWOW64にあるバージョンを実行することにより、64ビットWindowsから32ビットPowershellを起動することもできます。タスクスケジューラが起動しているバージョンを確認してください。

Powershellの各バージョンには、完全に別個の実行ポリシーがあることに注意してください。したがって、Powershellの32ビットバージョンと64ビットバージョンの両方をカバーするには、実行ポリシーを2回設定する必要があります。

ロードしようとしているスナップインも重要な場合があります。一部のスナップインおよびCOMオブジェクトは、32ビットまたは64ビット環境でのみロードできます。ただし、PowerCLIがインストールされたServer 2008 R2サーバーでテストしたところ、両方の環境で参照したスナップインの読み込みに問題はありませんでした。ですから、それがここでの問題ではないと思います。しかし、それはまだ考慮すべきことです。インストールしたPowerCLIのバージョンによって異なる場合があります。スナップインが32ビットと64ビットの両方のPSシェルからロードされることを確認してください。

最後に、スケジュールされたタスクの[アクション]画面の内容を正確に教えてください。実行している正確なコマンドライン(引数付き)は何ですか? cmd /c powershell.exe c:\yourscript.ps1 2>&1> C:\debug.txtのようなものを実行すると、より多くのデバッグ情報が得られる可能性があります

32ビット環境と64ビット環境の両方からのGet-ExecutionPolicy -Listの出力を提供することも役立つ場合があります。

また、あなたの投稿であなたは言及します:

タスクは永続的に実行され続けます。結果が得られず、終了しません。

これは通常、ユーザー入力を待機していることを示します。

編集:タイプミス、タイプミスeveyrwhere

3
Ryan Ries