38

最新のセキュリティ イベント 4740 について、SMTP 経由でメールを送信するようにセットアップされた小さなスクリプトをドメイン コントローラーに持っています。

スクリプトを手動で実行すると、意図したとおりに実行されます。ただし、スケジュールされたタスクを介して実行するように設定すると、実行されたように見えますが、何も起こりません (電子メールはありません)。

スクリプトは次のとおりです。

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}

$Event = Get-EventLog -LogName Security -InstanceId 4740 -Newest 5
$MailBody= $Event.Message + "`r`n`t" + $Event.TimeGenerated

$MailSubject= "Security Event 4740 - Detected"
$SmtpClient = New-Object system.net.mail.smtpClient
$SmtpClient.host = "smtp.domain.com"
$MailMessage = New-Object system.net.mail.mailmessage
$MailMessage.from = "fromemail@domain.com"
$MailMessage.To.add("toemail.domain.com")
$MailMessage.IsBodyHtml = 1
$MailMessage.Subject = $MailSubject
$MailMessage.Body = $MailBody
$SmtpClient.Send($MailMessage)

スケジュールされたタスクは次のように設定されます。

RunsAs:LOCAL SYSTEM

Trigger: On event - Log: Security, Event ID: 4740

Action:  Start Program - C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

  Argument:  -executionpolicy bypass c:\path\event4740.ps1

私も次のことを試しました:

Trigger: On event - Log: Security, Event ID: 4740

Action:  Start Program - C:\path\event4740.ps1

タスク履歴によると、タスクの開始、アクションの開始、作成されたタスク プロセス、アクションの完了、タスクの完了。同じ「問題」でサイト上のいくつかのさまざまなリンクを調べましたが、それらはすべて、私が持っていない何らかの変数を持っているようです. また、言及された解決策のいくつかを、それらが多少関連していると考えて試しましたが、残念ながら何も機能していません. ここに記載されているように、スケジュールされたタスクを削除してリセットしようとしました: http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/11/weekend-scripter-use-the-windows-task-scheduler -to-run-a-windows-powershell-script.aspx

以前にこのタイプのエラーに遭遇した人、またはこの問題を回避する方法を知っている人はいますか?

トラブルシューティング:

スケジュールされたタスクを介して .bat ファイルを呼び出すことにしました。現在の日付/時刻を監視対象フォルダーにエコーする単純なファイルを作成しました。ファイルを手動で実行し、4740 イベントによってトリガーされたタスクを介して実行すると、望ましい結果が得られました。代わりに.ps1ファイルを呼び出すように.batファイルを変更すると、手動で機能しました。4740 イベントによってトリガーされた場合、.bat は実行されなくなりました。

4

20 に答える 20

8

すでに問題の解決策を見つけているかもしれませんが、他の誰かのためにこのメモを投稿するつもりです. 同様の問題に遭遇しました。基本的に、別のドメイン アカウントを使用してテストと比較を行いました。「ユーザーがログオンしているかどうかに関係なく実行する」にチェックを入れると、タスクは問題なく実行されました。

次の点に注意して確認してください。

  1. タスクの実行に使用されるアカウントには、サーバーのローカル セキュリティ ポリシーの下で "バッチ ジョブとしてログオン" 権限が必要です (またはローカル管理者グループのメンバーである必要があります)。スクリプト/bat ファイルを実行するために必要なアカウントを指定する必要があります。
  2. 正しいパスワード文字を入力していることを確認してください
  3. 2008 R2 のタスクは、「ユーザーがログオンしているかどうかに関係なく実行する」として実行すると、特別に対話的に実行されません。タスクが作成されたときにスクリプトでユーザー プロファイルに固有のオブジェクト\リソースを探している場合、これは特に失敗する可能性があります。これは、powershell セッションを開始するためにその情報が必要になるためです。それ以外の場合は、開始してすぐに終了します。スクリプトを実行するときに $Path を「ユーザーがログオンしているかどうかに関係なく実行する」として定義する例として、マップされたドライブを指定します。タスクが開始されたときにそのドライブを探しますが、タスクを実行するために検証されたユーザー アカウントがログインされておらず、スクリプト上で作業する必要があるソース\オブジェクトを参照しているため、タスクは存在しません。終了するだけです。マップされたドライブ (\server\share) x:\ 対実際の UNC パス \server\share
  4. ステップ、スクリプト、引数を確認します。このプロセスを何度も行ったとしても、最小のピースが大きな違いを生むことがあります。スクリプトやタスクを作成するときに、パスワードを入力するときに文字を入力したり、セミコロンを忘れたりすることが何度かありました。

このリンクを確認してください。うまくいけば、あなたまたは他の誰かがこの情報から利益を得ることができます: https://technet.microsoft.com/en-us/library/cc722152.aspx

于 2015-04-06T19:42:27.277 に答える
7

: [タスク アクションの作成] ではなく、[基本タスク アクションの作成] を選択していることを確認してください。

次の解決策を見つけました。

1)powershell.exeこれを管理者として実行します

  1. powershell.exeアイコン を右クリック
  2. ショートカットキーメニューの下のプロパティをクリックします
  3. 進むボタンをクリックします。「管理者として実行」にチェックが入っていることを確認してください。

2) アクション ペインの下のタスク スケジューラ ウィンドウで、次のスクリプトを新しいコマンドとして追加します。

%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NonInteractive -ExecutionPolicy Bypass -noexit -File "C:\ps1\BackUp.ps1"

ここに画像の説明を入力

于 2016-06-08T10:09:42.933 に答える
3

エラー メッセージが表示されず、問題の原因がわからない場合 (PowerShell スクリプトがスケジュールされたタスクから開始したくない理由)、次の手順を実行して答えを取得します。

  1. スケジュールされたタスクに設定されているユーザーとして CMD を実行し、PowerShell スクリプトを実行します。
  2. PowerShell スクリプトが配置されているフォルダーを参照します。
  3. PowerShell スクリプトを実行します ($ErrorActionPreference= 'silentlycontinue' のようにスクリプト内に存在する場合、エラー通知をブロックするすべてのステートメントを削除します)。

すべてのエラー通知を表示できるはずです。

私のスクリプトの1つの場合、それは次のとおりでした:

「型 [System.ServiceProcess.ServiceController] が見つかりません。この型を含むアセンブリが読み込まれていることを確認してください。」

この場合、不足しているアセンブリをロードするために、スクリプトの先頭に次の行を追加する必要があります。

Add-Type -AssemblyName "System.ServiceProcess"

そして次のエラー:

"1" 個の引数を指定して "GetServices" を呼び出し中に例外が発生しました: "コンピューター '' でサービス コントロール マネージャーを開けません。この操作には他の特権が必要な場合があります。"

select : プロパティ「データベース名」が既に存在するため、プロパティを処理できません

于 2018-09-07T10:10:55.070 に答える
2

ExecutionPolicy Bypassスケジュールされたタスクを機能させるための引数を実装しました。

Program: Powershell.exe
Add Arguments: -ExecutionPolicy Bypass -File C:\pscommandFile.ps1
于 2015-11-17T00:28:20.650 に答える
1

私のシナリオに適用できる成功した回避策が見つかりました:

ログオフしないでください。セッションをロックしてください。

このスクリプトはドメイン コントローラーで実行されているため、リモート デスクトップ コンソール経由でサーバーにログインし、サーバーからログオフしてセッションを終了します。タスク スケジューラでタスクを設定するとき、オフライン モードで実行するためのアクセス権を持たないユーザー アカウントとローカル サービスを使用していました。またはスクリプトを実行するために厳密にログオンしました。

Cole によるトラブルシューティングの支援のおかげで、私は RunAs 機能について考えるようになり、機能していないログオンを回避することを試みることにしました。

タスク スケジューラから始めて、手動で作成したタスクを削除しました。Server 2008 R2 の新しい機能を使用して、イベント ビューアーで 4740 セキュリティ イベントに移動し、右クリック > [このイベントにタスクをアタッチ...] を使用して、プロンプトに従い、[アクション] ページのスクリプトをポイントしました。タスクが作成された後、セッションをロックし、リモート デスクトップ コンソール接続を終了しました。プロファイルが「ロック」され、ログオフされていない場合、すべてが正常に機能します。

于 2013-08-15T23:01:59.010 に答える
0

これとほぼ同じ問題を抱えていましたが、Server 2012 R2 では少し異なりました。タスク スケジューラに、ある場所から別の場所に 3 つのファイルをコピーする powershell スクリプトがあります。PowerShell からスクリプトを手動で実行すると、魅力的に機能します。ただし、タスク スケジューラから実行すると、最初の 2 つの小さなファイルのみがコピーされ、3 つ目 (大きなファイル) でハングします。また、「オペレーターまたは管理者が要求を拒否しました」という結果も得られました。そして、私はこのフォーラムでほとんどすべてのことを行いました。

これがシナリオと、私がそれを修正した方法です。他の人にはうまくいかないかもしれませんが、念のため:

シナリオ: 1. タスク スケジューラの Powershell スクリプト 2. サーバーのローカル管理者であるドメイン アカウントを使用して実行 3. [ユーザーがログオンしているかどうかにかかわらず実行する] を選択 4. 最高の権限で実行

修正: 1. ドメイン アカウントを使用してサーバーにログインし、C:\Users にローカル プロファイルを作成する必要がありました。2.スクリプトで参照したすべてのドライブにユーザーがアクセスできることを確認し、ユーザーを作成しました

#1が私にとっての主な修正だと思います。これが他の人にも役立つことを願っています。

于 2015-04-15T19:39:13.300 に答える
0

WIN 10でこの問題が発生している場合、私と同じように問題が解決する可能性があります。更新により、タスク スケジューラが台無しになりました。

http://answers.microsoft.com/en-us/windows/forum/windows_10-performance/anniversary-update-version-1607-build14393-breaks/d034ab52-5d49-4b92-976a-a1355b5a6e6d?page=2

このコメントは私の問題を解決しました。

「1回限りの」タスクに関するあなたのヒントはうまく機能します.MSが問題を修正するまで、回避策として十分です. 私が見る限り、「毎日」の唯一の利点は、実行時間に関連付けられた任意の日付がないことです。ジョブが X 日に開始するように設定されている理由について、他のユーザーは混乱する可能性があります。

トリガー設定 「Einmal」は「一度だけ」、「Sofor」は「一度に」を意味します。

于 2016-11-09T15:38:25.397 に答える