題名の通り、WindowsタスクにPowerShellのワンライナーを埋め込みたくて方法を調べていました。ついでに、IISのログを削除するWindowsタスクを、PowerShellワンライナーで実装して、PowerShellでWindowsタスク登録するまでやったのでメモ。(何書いてるかわからなくなってきましたが)
実際の実装例として、指定の日数より古いIISのログを削除するWindowsタスクを登録するPowerShellを書いてみました。
Windowsはタスク一つ登録するのにも大変ですね・・その分色々できますが。PowerShell使えば手順的にもシンプルになって良いです。
$iisLogDir = "C:\inetpub\logs\LogFiles\W3SVC1" $logRetentionDays = 30 $filter = "*.log" $taskName = "HouseKeep IIS Logs" $taskPath = "\IIS Tasks" $powershellExe = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" $command = '-Command "Invoke-Command {' $command += "Get-ChildItem -Path '$iisLogDir' -Filter '$filter'" $command += " | ?{!`$_.PSIsContainer}" $command += " | ?{((Get-Date) - `$_.CreationTime).Days -gt $logRetentionDays}" $command += " | %{Remove-Item `$_.FullName}" $command += '}"' $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount $action = New-ScheduledTaskAction -Execute $powershellExe -Argument $command $trigger = New-ScheduledTaskTrigger -Daily -At 1am $task = New-ScheduledTask -Trigger $trigger -Principal $principal -Action $action Register-ScheduledTask -InputObject $task -TaskName $taskName -TaskPath $taskPath
後は実行テストしてみます。たぶん問題無く動くはず。