2017-06-16 8 views
1
function ServiceRestart 
{ 
    Param 
    (
     $ErrorLog, 
     $Services, 
     $MaxSize  
    ) 

    $Time = Get-Date -Format 'yyyy:MM:dd HH:mm:ss' 
    $Result = (Get-Item $ErrorLog).length 


    if($Result -gt $MaxSize) 
    { 
     Clear-Content $ErrorLog 
    } 

    Try 
    { 
     Foreach($Service in $Services) 
     { 
      Restart-Service -DisplayName $Service -ErrorAction Stop 
     } 
    } Catch 
     { 
     "ERROR: $Service could not be restarted $Time" | Add-Content $ErrorLog 
     } 
} 

ServiceRestart -ErrorLog -Services -MaxSize 

私は、タスクスケジューラ
から、次のパラメータを渡す必要がありサービスを
- MaxSizeの私は現在、この
ように私のタスクスケジューラを設定している
パスPowerShellのパラメータは

プログラム/スクリプト:C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥powershell.exe

引数を入力してください(オプション):
- コマンド "& \ ServerName \ C $ \ Users ***** \ Documents \ Scripts \ Scheduled-ServiceRestart.ps1
-ErrorLog 'ServerName \ C $ \ Users ***** \ Documents \ log \ ScriptErrors.txt'
- サービス 'foo1'、 'foo2'
-MaxSize '5MB' "

スケジュールされたタスクを実行しても、何も起こらない場合があります。

答えて

2

-Commandではなく-Fileパラメータを使用するようにタスクをスケジュールすることをお勧めします。例:

プログラム/スクリプト:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

追加の引数(オプション):(オプション)で-NoProfile -ExecutionPolicy Unrestricted -File 'Scheduled-ServiceRestart.ps1' -ErrorLog 'ScriptErrors.txt' -Services 'foo1','foo2' -MaxSize 5MB

スタート:C:\Users\<username>\Documents\Scripts

あなたは、「スタートでスクリプトの開始ディレクトリを指定することができますスクリプトファイルとログファイルへの長いパス名を避けてください。 (ネットワーク上ではなくローカルコンピュータ上でスクリプトのコピーを実行していると仮定していることに注意してください。

+0

-NoProfile -ExecutionPolicy Unrestricted -File 'Scheduled-ServiceRestartを使用しています。「サービス1」、「サービス2」-MaxSize「500MB」「エラーが発生しました(0xFFFD0000)。私はこれを実行しています。 @Bill_Stewart –

+0

スクリプトをローカルサーバーにコピーします。 –

0

まず関数をインポートする必要があります。関数をモジュールとして保存し、それをsystem32またはprogramファイルのmodulesフォルダに置くことをお勧めします。このようにして、powershellを起動すると、自動的に関数がインポートされます。

これを実行すると、タスクスケジューラは非常に簡単です。

プログラム/スクリプト

Powershell 

は、引数(オプション)を追加:

-Command &{ServiceRestart -ErrorLog 'ServerName\C$\Users*****\Documents\log\ScriptErrors.txt' -Services 'foo1','foo2' -MaxSize '5MB'} 
0

限り質問へのリテラルの答えとして:多分、あなたのスクリプトの場所を囲むように単一引用符を追加する必要があり、そうでなければ、特殊文字/バックスラッシュをエスケープとして解釈しようとします。

例:

-Command "& '\ServerName\C$\Users*****\Documents\Scripts\Scheduled-ServiceRestart.ps1' ... 

また、それが実際に開始されることを保証するために、あなたのPowerShellスクリプトにいくつかの基本的なロギングを追加することができます。

プロダクションで「-Command &」スタイルを使用します。Powershellのスケジュールされたタスク&文字列が正しくフォーマットされていれば、正常に動作します。

関連する問題