我试图从对的zabbix代理清理磁盘运行PowerShell脚本。看来,脚本运行时间过长,而不是回应我的错误。
powershell -NonInteractive C:\Scripts\CleanDisk.ps1 -deleteLogsOlderThanDays 10
脚本删除一些日志和临时文件夹和打印的统计数据。如果只有几个文件夹,删除它的工作的罚款。但是,如果脚本运行时间过长则对话窗口与脚本结果,错误获得价值从结束代理失败:ZBX_TCP_READ
猜猜这是因为连接到客户端超时。是否有某种方式如何克服这种限制?谢谢
我的同事们发现可用的解决方法。取而代之的启动脚本将运行很长一段时间它与Schtask.exe的更好,只计划脚本。所以我修改剧本,现在它包含两个部分。一个是负责安排和开始预定任务(计划它的自我,但使用不同的参数),第二重型和长时间运行的确实的动作。调度的结果将出现在ZABBIX,长时间运行的作用结果执行脚本对话框将日志文件...
下面是例子PowerShell脚本StartCleanDisk.ps1的。在这种情况下,任务将被预定并立即调度执行。
StartCleanDisk.ps1 -deleteLogsOlderThanDays 10 -startAsTask 1
在这种情况下,任务将直接执行。
StartCleanDisk.ps1 -deleteLogsOlderThanDays 10 -startAsTask 0
StartCleanDisk.ps1内容:
[CmdletBinding()]
param
(
[parameter(Mandatory=$true)]
[int]
$deleteLogsOlderThanDays,
[bool]
$startAsTask = $false
)
if ($startAsTask)
{
Write-Output "Scheduling task for cleaning disk ...";
$taskname = "CleanDisk"
$logFile = "X:\logs\Tasks\cleaningDisk.log";
$task = "powershell $PSScriptRoot\StartCleanDisk.ps1 -deleteLogsOlderThanDays $deleteLogsOlderThanDays -startAsTask 0 > $logFile 2>&1";
& schtasks /create /ru "System" /tn $taskname /tr $task /sc once /ST 23:59 /F /V1 /Z;
Write-Output "Task Clean disk created...";
& schtasks /run /tn $taskname;
Write-Output "Task $taskname started... Please chek $logFile";
exit 0;
}
#####################
# Script begins here
# PUT HERE COMMANDS FOR DELETING
#####################
开始作为一个隐藏的进程
UserParameter=Key[*],powershell -NoProfile -ExecutionPolicy Bypass Start-Process powershell -ArgumentList \\Path\SYSVOL\..\scripts\Files\Zabbix\Key.$1.ps1 "$2" "$3" -Windowstyle Hidden
其中key [*]是的zabbix代理开始的PowerShell的活动项目,在Windows主机上,用于名PowerShell的scrips的变化$ 1,“$2" "$3" "next"
任何参数
如果$1="Ring"
那么脚本的名称将Key.Ring.ps1