Terminal Mikrotik自动用户管理器用户脚本需要改进

Terminal Mikrotik自动用户管理器用户脚本需要改进,terminal,scripting,mikrotik,Terminal,Scripting,Mikrotik,我写了这个脚本,但它不能正常工作。有人能帮忙吗 它应该检查下载限制和用户使用的下载,然后执行一些操作,即从活动ppp列表中删除用户,但它有一些缺陷,即我无法在变量中获取实际配置文件值,因此我将配置文件名称保存在用户管理器用户帐户的注释中,这样我就可以在变量,但这不是我想要的。这就是为什么要在变量中获得实际的配置文件值,还有一个问题。为什么我不能直接更改用户帐户配置文件,我做了很长的一段时间,但这样我就失去了用户帐户的统计信息,这样我就不会丢失用户的统计信息帐户和工作也完成了 脚本V1.0: :f

我写了这个脚本,但它不能正常工作。有人能帮忙吗

它应该检查下载限制和用户使用的下载,然后执行一些操作,即从活动ppp列表中删除用户,但它有一些缺陷,即我无法在变量中获取实际配置文件值,因此我将配置文件名称保存在用户管理器用户帐户的注释中,这样我就可以在变量,但这不是我想要的。这就是为什么要在变量中获得实际的配置文件值,还有一个问题。为什么我不能直接更改用户帐户配置文件,我做了很长的一段时间,但这样我就失去了用户帐户的统计信息,这样我就不会丢失用户的统计信息帐户和工作也完成了

脚本V1.0:

:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={   
/ppp active remove [find name=$uname]
/tool user-manager user set $i disabled=yes
:log warning "$uname account has been disabled due to downloading limit exceeding";
/tool user-manager user remove $i
:log warning "$uname account is removed on package expiring";
/tool user-manager user add customer=admin disabled=no username=$uname password=$upass; 
/tool user-manager user create-and-activate-profile $uname customer=admin profile="Expired User";
:log info "$uname account has been created again with expired profile";
}
}
:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={
:global uip [/tool user-manager user get $i ip-address];
:global hostip [:pick $uip 11 14];
/tool user-manager user set $i ip-address="10.10.10.$hostip"
/ppp active remove [find name=$uname]
:log warning "$uname has been assigned to expired ip pool with ip 10.10.10.$hostip";
}
}
脚本V1.0的工作原理:

:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={   
/ppp active remove [find name=$uname]
/tool user-manager user set $i disabled=yes
:log warning "$uname account has been disabled due to downloading limit exceeding";
/tool user-manager user remove $i
:log warning "$uname account is removed on package expiring";
/tool user-manager user add customer=admin disabled=no username=$uname password=$upass; 
/tool user-manager user create-and-activate-profile $uname customer=admin profile="Expired User";
:log info "$uname account has been created again with expired profile";
}
}
:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={
:global uip [/tool user-manager user get $i ip-address];
:global hostip [:pick $uip 11 14];
/tool user-manager user set $i ip-address="10.10.10.$hostip"
/ppp active remove [find name=$uname]
:log warning "$uname has been assigned to expired ip pool with ip 10.10.10.$hostip";
}
}
它会查找超过个人资料下载限制的所有用户,以便删除并重新创建他们的帐户,并将过期的个人资料分配给他们,使他们不再上网。 但它有一个问题,那就是当我删除用户帐户时,我丢失了用户帐户的统计信息。这就是为什么它不是一个好的解决方案

脚本V2.0:

:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={   
/ppp active remove [find name=$uname]
/tool user-manager user set $i disabled=yes
:log warning "$uname account has been disabled due to downloading limit exceeding";
/tool user-manager user remove $i
:log warning "$uname account is removed on package expiring";
/tool user-manager user add customer=admin disabled=no username=$uname password=$upass; 
/tool user-manager user create-and-activate-profile $uname customer=admin profile="Expired User";
:log info "$uname account has been created again with expired profile";
}
}
:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={
:global uip [/tool user-manager user get $i ip-address];
:global hostip [:pick $uip 11 14];
/tool user-manager user set $i ip-address="10.10.10.$hostip"
/ppp active remove [find name=$uname]
:log warning "$uname has been assigned to expired ip pool with ip 10.10.10.$hostip";
}
}
脚本V2.0的工作原理:

:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={   
/ppp active remove [find name=$uname]
/tool user-manager user set $i disabled=yes
:log warning "$uname account has been disabled due to downloading limit exceeding";
/tool user-manager user remove $i
:log warning "$uname account is removed on package expiring";
/tool user-manager user add customer=admin disabled=no username=$uname password=$upass; 
/tool user-manager user create-and-activate-profile $uname customer=admin profile="Expired User";
:log info "$uname account has been created again with expired profile";
}
}
:foreach i in=[/tool user-manager user find] do={
:global uname [/tool user-manager user get $i username];
:global upass [/tool user-manager user get $i password];
:global dused [/tool user-manager user get $i download-used];
:global uprofile [/tool user-manager user get $i comment];
:global dlimit [/tool user-manager profile limitation get [find name="$uprofile"] download-limit];
:if ($dused > $dlimit) do={
:global uip [/tool user-manager user get $i ip-address];
:global hostip [:pick $uip 11 14];
/tool user-manager user set $i ip-address="10.10.10.$hostip"
/ppp active remove [find name=$uname]
:log warning "$uname has been assigned to expired ip pool with ip 10.10.10.$hostip";
}
}
它查找超过其下载限制的所有用户(超过配置文件下载限制),获取其静态IP,然后将IP拆分为网络地址和主机地址,然后将过期的IP池网络地址添加到其中,然后将主机地址添加到过期的IP池网络地址,然后为每个用户分配ip,因此,他们的工作互联网ip池被更改为过期池,因此统计数据不会在过程中丢失,而且他们现在也没有任何互联网了。。! 所以这是一个更好的解决方案……但我期待着它能比这更好D

  • 你为什么要卷入一场白费力气的追逐

  • 为什么要为这个函数使用脚本?为什么不使用用户管理器直接分配它?类似的讨论

    。。。这只是分享一些想法,也许你可以根据你的要求进一步增强它

  • Mikrotik用户管理器是一个很好的迷你计费系统,但它不是Mikrotik长久以来关注的焦点。它有其缺陷和局限性

  • 如果您是像ISP/Net_运营商这样的商业实体,那么我建议您使用一些专用的计费系统,如freeradius或radius manager,它们可以很好地完成这项工作

  • 它还可以执行许多其他奇特的功能,如发送短信/重定向/等等


-Freeradius仅为后端引擎。如果您想了解更多信息,请在谷歌上搜索Freeradius部署。那里有成千上万的导游。我在我的博客上也写了一些初学者指南,通过使用一些现成的复制粘贴命令,这是迈出第一步的好方法如果您需要一些定制的显示/功能要求,您可以用php或任何其他语言设计自己的前端。-或者你可以使用预先制作好的前端,比如Daloradius、dialupadmin和许多其他的。