我正在尝试运行PowerShell脚本来清理Zabbix上的代理磁盘。似乎脚本运行时间过长而反应我得到了错误。
powershell -NonInteractive C:\Scripts\CleanDisk.ps1 -deleteLogsOlderThanDays 10
脚本删除一些日志和临时文件夹并打印统计信息。如果只有很少的文件夹要删除它就会罚款。但是如果脚本运行时间过长,那么带有脚本结果的对话框窗口会以错误从代理获取值失败:ZBX_TCP_READ
猜猜是因为连接到客户端超时。有什么方法可以克服这个限制吗? THX
答案 0 :(得分:0)
我的同事找到了可用的解决方法。而不是启动将运行很长时间的脚本,最好只使用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
#####################
答案 1 :(得分:0)
从隐藏进程开始
UserParameter=Key[*],powershell -NoProfile -ExecutionPolicy Bypass Start-Process powershell -ArgumentList \\Path\SYSVOL\..\scripts\Files\Zabbix\Key.$1.ps1 "$2" "$3" -Windowstyle Hidden
其中Key [*]是Zabbix代理中的活动项,用于在Windows主机上启动Powershell,
$ 1用于表示PowerShell脚本的名称,“ $2" "$3" "next"
用于表示所有参数
如果$1="Ring"
,则脚本名称将为Key.Ring.ps1