web-dev-qa-db-ja.com

Windows Server 2008 R2 PowerShellスクリプトは手動で実行されますが、スケジュールされたタスクとしては実行されません

PowerShell ISE を使用して手動で実行するPowerShellスクリプトがあります。ただし、管理者の資格情報を使用してスケジュールされたタスクとして実行すると、タスクは期待どおりの結果で実行されません。

スクリプト:

$request=new-object System.Net.WebClient
$request.DownloadFile("...url...", "C:\path\to\file.csv")

管理者ユーザーは、スクリプトと、書き込み先のフォルダーの両方のフルコントロールを持っています。 URLが存在し、妥当な時間(1秒未満)で応答します。

タスクを手動で実行すると、最終的に終了するまで、ステータスは0x41301(「現在実行中」)になります。これらの方法の両方を使用してタスクを設定しました:

  1. プログラムを開始:C:\path\to\PS.PS1
  2. プログラムを開始:C:\windows\system32\WindowsPowerShell\v1.0\powershell.exe追加オプションあり-noninteractive -command "C:\path\to\PS.PS1"

オプション1を使用すると、タスク履歴はnotepad.exeのインスタンスを開いたことを示しますが、終了することはありません。オプション2を使用するとタスクは完了しますが、ファイルのダウンロードや作成は行われません。

利用した Set-ExecutionPolicy Unrestrictedこれは署名されたスクリプトではないため。

この問題を解決するにはどうすればよいですか?

5
Aeisor

スクリプトブロックの代わりにスクリプトファイルを実行しているため、使用する必要があるパラメーターは-Fileです。

さらに、Set-ExecutionPolicyコマンドレットを使用して実行ポリシーを設定しても、スクリプトがそのコンテキストで実行されるとは限りません。有効な実行ポリシーは、グループポリシー(GPO)によって上書きされる可能性があります。ファイルの実行時にこれを強制するには、-ExecutionPolicyパラメーターを使用します。

あなたが探しているコマンドは次のとおりです

powershell.exe -ExecutionPolicy Unrestricted -NonInteractive -NoProfile -File c:\path\ps.ps1

これらのパラメータの詳細については、 ここ を参照してください。

6
MFT

実行しようとしているスクリプトファイルは、ネイティブで信頼されているファイルではありません。コマンドを実行するには、ファイルパスの前にアンパサンドを使用します。

Powershell.exe -ExecutionPolicy Unrestricted -Command { & 'C:\path\to\PS.PS1' }

その他のPowerShell起動パラメーターは、PowerShell.exeコマンドラインヘルプにあります。

1
jessenich

次の方法で、すべてのスコープの実行ポリシーを確認できますか?

Get-ExecutionPolicy -List

あなたが設定した場合 LocalMachine する方針 RemoteSigned、次のようなタスク定義ができるはずです。

で開始: C:\ Windows\System32\WindowsPowerShell\v1.0

実行: C:\ Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -File c:\ path\to\ps.ps1

0
Simon Catlin

既に問題の解決策を見つけた可能性がありますが、他の人のためにこのメモを投稿します。私は同様の問題に遭遇しました。基本的に、テストと比較には別のドメインアカウントを使用しました。 [ユーザーがログオンしているかどうかにかかわらず実行する]をオンにすると、タスクは正常に実行されました。

心に留めておき、次の点を確認してください。

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

提供されたリンクを確認してください。うまくいけば、あなたや他の誰かがこの情報から利益を得ることができます。安全である。

https://technet.Microsoft.com/en-us/library/cc722152.aspx
0
Prognox