私は、Trap Receiver(環境変数も渡します)(Windows 2008上で実行中)によって呼び出されるバッチスクリプトによって呼び出されるpowershellスクリプトを持っています。同じpowershellスクリプトを複数の非同期時間で別々のrunspaceで実行する
トラップは2-4トラップイベントのセットで時々フラッシュされ、バッチスクリプトは各メッセージのトラップ詳細をログファイルにエコーしますが、バッチスクリプトの次の行のpowershellスクリプトは最初のトラップメッセージを処理するように見えます(powershellスクリプトは同じログファイルに書き込みます)。
私の解釈は、デフォルトの実行領域が実行中のスクリプトのすべての反復に共通していることです。これが他のものが無視されているように見える理由です。
"powershell.exe -command"を使ってpowershellスクリプトを呼び出すと "-sta"を追加しようとしましたが、これは役に立たなかったです。
私はC#を使ってメソッドを研究し、見つけましたが、この言語を知らず、powershellを十分に学習しているので、バッチとpowershellの間の「ラッパー」をインタリーブするより直接的な解決策が必要です環境変数を渡します。
http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx
私はstackoverflowの通過狩りました、そして、再び同様の静脈の唯一の問題は、C#を使用していました。
いくつかのスクリプトの背景:
PowerShellスクリプトは、実際にgregorystrikeウェブサイトで見つける素晴らしいスクリプトの修正である - 私は1つのリンクに制限していますが、左側アレイのためのその一つとして、リンクを投稿傾けます。たくさんのモッズが1つの.iniファイルから複数のターゲットを実行し、環境変数を取り込み、スクリプトの一部をwinformとインタラクティブに実行するオプション。しかし、元のスクリプトの要点を見ることができます。
バッチスクリプトはかなり基本的です。キーの事は:〜演算子を使ってトラップノイズをフィルタリングしようとしています。これがpowershellスクリプトをコンパイルするかどうかを調べるために-staオプションを試しました。
set debug=off
set CMD_LINE_ARGS="%*"
set LHIPAddress="%2"
set VARBIND8="%8"
shift
shift
shift
shift
shift
shift
shift
set CHASSIS="%9"
echo %DATE% %TIME% "Trap Received: %LHIPAddress% %CHASSIS% %VARBIND8%" >> C:\Logs\trap_out.txt
set ACTION="%VARBIND8:~39,18%"
echo %DATE% %TIME% "Action substring is %ACTION%" 2>&1 >> C:\Logs\trap_out.txt
if %ACTION%=="Remote Copy Volume" (
echo Prepostlefthand_env_v2.9 >> C:\Logs\trap_out.txt
c:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -sta -executionpolicy unrestricted -command " & 'C:\Scripts\prepostlefthand_env_v2.9.ps1' Backupsettings.ini ALL" 2>&1 >> C:\Logs\trap_out.txt
) ELSE (
echo %DATE% %TIME% Action substring is %ACTION% so exiting" 2>&1 >> C:\Logs\trap.out.txt
)
exit
ROFLの感謝をやっているされているもの地獄に役立ちます、と幸運あなた!私は必要なもののように見えます、そして、私はnivotウェブサイトの残りの部分を熟読するのを楽しむでしょう。スクリプトを再作成すると、私は実際にそれが書かれてはならないと考えています。それは魅力的ではありません。ただのバックアップです。しかし、基本的には同じスクリプトですが、唯一の違いは、最終的にSNMPトラップから来る環境変数です。したがって、オブジェクトはスクリプトのインスタンス間で共有できません。 – teqnomad
PSこの質問に後で出くわした人には、スクリプトに間違いがあります。 PowerShellの出力を同じログファイル名に追加して非同期に実行することはできません。私は一意のログファイル名を生成し、これに追加します。 – teqnomad