2

すべてのスクリプト コンテンツを投稿することはできませんが、基本的な考え方は、JSON をダウンロードし、ConvertFrom-Jsonコマンドレットを使用してオブジェクトに変換することです。一部のオブジェクトは除外され、残りは XML/XLS ドキュメント (Excel 2003 形式) に書き込まれます。このファイルは電子メールに添付され、さまざまな人に送信されます。

私が抱えている問題は、Powershell ISE から実行した場合にのみ機能することです。スケジュールされたタスクを設定したり、cmd から呼び出したり、powershell から呼び出したりすると、添付ファイルが完全に空になります。一部の関数が実行されていないかのようです (ループしてすべての行を作成する関数)。

当面は ISE から引き続き実行できますが、このスクリプトの目的は、介入を必要としない自動電子メールを送信することです。これを引き起こしている可能性のあるものについてのアイデアはありますか?

4

5 に答える 5

2

コメントから元の投稿への回答に基づいて、ISE で実行されるスクリプトがコンソールで使用される変数を認識できるようにするバグ/癖/機能のために、スクリプトが 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

  • 初期化されていない変数 (文字列内の初期化されていない変数を含む) への参照を禁止します。
  • オブジェクトの存在しないプロパティへの参照を禁止します。
  • メソッドを呼び出すための構文を使用する関数呼び出しを禁止します。
  • 名前のない変数 (${}) を禁止します。
于 2016-01-22T17:31:39.313 に答える
1

私はこの問題を抱えていました.PowerShellのシングルスレッド関数を使用してスクリプトを実行するとうまくいきました. 他のオプションを試すこともできます。詳細については、このリンクにアクセスしてください。

powershell.exe -noexit c:\test.ps1 -sta
于 2013-04-02T09:15:17.600 に答える