4

Windowsタスクスケジューラの監視を導入しようとしています。次のコマンドを実行するPowershellスクリプトがあります。

$serverName = hostname
$schedule = new-object -com("Schedule.Service")
$schedule.connect($serverName)
$tasks = $schedule.getfolder("\").gettasks(0)
$tasks |select name, lasttaskresult, lastruntime

これにより、実行されているサーバーでスケジュールされているタスクのリスト、最後のタスクの結果、および最後の実行時間が返されます。これの目的は、アラートに使用できる監視ソリューション(Geneos)にデータセットを返すことです。

Win2008の大規模な資産があるため、スクリプトを一元化して、Geneosプローブのいずれかがそれを呼び出し、ホストのデータセットを返すことができるようにする必要があります。これを行うために、PowerShellを.batファイルでラップしました。これは次のことを行います。

\\fileserverhk\psexec.exe -accepteula -u admin -p "pwd" powershell.exe cpi \\fileserverhk\scripts\TaskSchedulerMonitor.ps1 -Destination C:\Monitor\TaskSchedulerMonitor.ps1
\\fileserverhk\psexec.exe -accepteula -u admin -p "pwd" powershell.exe -ExecutionPolicy Bypass -File C:\Monitor\TaskSchedulerMonitor.ps1

最初のステップでは、.ps1ファイルをローカルにコピーして、UNCパスを信頼しないPowershellを回避し、2番目のステップでスクリプトを実行します。

テストサーバーから.batファイルを手動で実行すると、正常に実行されます(これは管理者アカウントでログインしています)。ただし、Geneos(SYSTEMアカウントで実行)を介して.batファイルを起動すると、次のようになります。

Access is denied.
PsExec could not start powershell.exe:

つまり、基本的に私の質問は、PsExecがSYSTEMアカウントで実行されているときに、ユーザーを切り替えるにはどうすればよいですか?PsExecには別のアカウントのクレデンシャルが設定されていますが、システムで実行すると変更できないことが明らかにあります。

-hスイッチを使用して実行しようと読みましたが、次のエラーが発生します。

The handle is invalid.
Connecting to local system...


Starting PsExec service on local system...

Connecting with PsExec service on <server>...

Starting powershell.exe on <server>...

Error communicating with PsExec service on <server>:

上記のエラーに加えて、PSExecとPowerShellプロセスがリモートマシンでハングすることになります。興味深いのは、PSExecとPSEXEC.SVCがSYSTEMで実行され、PowerShellがadminで実行されているのを確認できることです。ほぼそこにありますが、何かが正しくありません。

4

1 に答える 1

2

Windows schtasksコマンド (ここにリンク) で powershell ラッパーを使用して、なんとかそこにたどり着きました。Schtasks は SYSTEM アカウントで実行でき、必要なすべてのタスク情報を返すため、アクセス許可を気にする必要がなくなり、環境でクリア テキストのパスワードを使用する必要もなくなりました (おまけ)。

ラップしました:

schtasks.exe Query /FO CSV

powershell スクリプトで、PS を使用して出力を Geneos が期待する csv スタイルにフォーマットします。

于 2012-11-13T09:45:24.067 に答える