用PowerShell脚本 DIY系统监控和管理器

孩子一个人在家时,我们总是有些担心电脑的使用情况,希望能查看电脑的开关机时间,或者对孩子玩某个游戏的持续时间进行控制(如果超过设定的时间则强制退出该游戏)。虽然我们也可以通过系统日志查看电脑的运行情况,但日志内容阅读起来不太直观。假如不想安装第三方的监控软件,那么完全可以借助Windows 10自带的PowerShell脚本来打造一个监控和管理器。

○一目了然查看电脑的开关机时间

我们可以通过“组策略+开关机脚本”来记录孩子使用电脑的时间。为了方便查看,我们先在“G:/”(盘符可自行修改)下新建“开机查询”和“关机查询”这两个文件夹,然后启动记事本程序,新建两个空白文本文件“开机查询.txt”和“关机查询.txt”并放置在上述对应的文件夹里。

接着再启动记事本程序,输入下面的命令:

"$(Get-Date -Format 'yyyy-MM-dd')的开机时间是:" | Out-File -Append "G:/开机查询/开机时间查询.txt"

Get-Date -Format 'H时:m分:s秒' | Out-File -Append  "G:/开机查询/开机时间查询.txt"

然后将其保存为“kaiji.ps1”,放置在“G:/开机查询”文件夹中备用(图1)。

命令解释:第一行命令是把“Get-Date”当作一个变量,使用"$()"进行引用,日期使用“年月日”的格式(表示开机日期),并将该内容以追加输入的方式输出到“G:/开机查询/开机时间查询.txt”文件中。第二行命令则是使用“Get-Date”获取当前时间(格式为“时分秒”,表示开机时间),也追加输出到同一个文件中。

操作同上,再新建一个名为“guanji.ps1”的文件(把“kaiji.ps1”中的“开机”改为“关机”,其他的代码相同),然后保存在“G:/关机查询”文件夹中备用。

接着在桌面的任务栏搜索框中输入“组策略”,启动组策略编辑器后依次展开“计算机配置→Windows设置→脚本(启动关机)→启动”,在打开的窗口中切换到“PowerShell脚本”,点击“添加”,将“G:/开机查询/kaiji.ps1”添加到运行列表中(图2)。

操作同上,继续添加“G:/关机查询/guanji.ps1”到关机脚本中。这样每次开关机后都会自动运行上述的脚本,并将开关机时间写入到对应的文本文件中。我们只要打开该文件进行查看即可(图3)。

○自动监控孩子运行游戏的时间

PowerShell脚本还能用来监控进程的创建时间和持续运行的时间,并且可以根据预设的时间对进程进行管理。比如现在要限制孩子最多玩90分钟的游戏,游戏进程是“C:/dnf/地下城与勇士/DNFchina.exe”。

首先启动记事本程序,输入下面的命令,然后将其保存为“3.ps1”,放置在“G:/”根目录下备用。

get-process DNFchina | ? { ([DateTime]::Now - $_.StartTime).TotalSeconds -gt 3600 } | stop-process

命令解释:

使用“get-process”查询指定进程(DNFchina)的信息,然后用当前时间减去游戏进程的创建时间,如果结果大于3600秒(即60分钟),那么就执行“stop-process”命令来终止进程。

接着在桌面的任务栏搜索框中输入“任务计划”,启动任务计划程序后新建一个基本任务,在创建任务窗口中切换到“常规”,任务的名称设置为“禁止游戏”,并勾选“使用最高权限运行”。再切换到“触发器→新建触发器”,建立一个2021年3月23日8:00开始运行的任务(开始时间可自行修改),具体参数设置参考图4所示的界面(图4)。

继续切换到“操作”,新建一个启动程序的操作,“运行程序或脚本”处选择“C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe”,“添加参数”处选择“G:/3.ps1”,“起始于”处选择“G:/”(图5)。

这样从2021年3月23日的8:00开始,系统就会在后台每隔半小时运行一次上述设置的脚本“G:/3.ps1”,它会对游戏进程(DNFchina.exe)的持续时间进行统计(如果游戏未运行则自动忽略)。假设孩子是在8:01分开始启动游戏的,那么8:30、9:00运行的任务不会终止游戏进程(因为当前时间减去进程的启动时间小于60分钟),而9:30运行的任务则会自动终止游戏进程(因为此时的持续时间为89分钟,大于60分钟,也就意味着孩子每次的最长游戏时间实际为89分钟)。如果需要修改限制时间,请自行更改“3.ps1”中的时间代码,并重新设置“重复任务间隔”等选项(图6)。

为了防止进程结束后孩子再次运行该游戏,还可以在“3.ps1”中添加一行代码(代码为:echo y|cacls "C:/dnf/地下城与勇士/DNFchina.exe" /g cfan:F),表示只授予cfan账户有完全控制权限(cfan为家长的用户名,孩子不知道该账户的密码)。这样进程结束后,孩子的账户将没有权限再次运行“DNFchina.exe”。