WINCC使用VBS脚本、SQLSERVER数据库触发器实现用户密码到期提醒

一、导入已经完成编程的WINCC项目,开启全局脚本运行,激活运行

在这里插入图片描述

二、打开WINCC自带的SQLSERVER数据库,登录进入,添加创建时间、更新时间。

在这里插入图片描述

打开用户数据库表

开始——所有程序——Microsoft SQL Server 2014(Microsoft SQL Server 2008,看你wincc的版本)——SQL Server 2014 Management Studio——找到本机server name —— windows authentication 登录
——展开左边——Databases
在这里插入图片描述
找到wincc项目的数据库名,一般有两个,打开没有“R”尾缀的哪一个
在这里插入图片描述

核对用户数据

找到“PW_USER”这个表,右键选择第三个,查询,核对下面数据是否与WINCC的用户管理器里面的数据相同
在这里插入图片描述
数据相同,是这个表无疑了。开始一顿操作

在数据库中添加创建时间、更新时间字段。添加根据密码变化,更新时间字段的触发器

在这里插入图片描述
1、New Query
2、将下面的SQL语句复制到空白处

-- 指定使用的库名
USE [CC_CPME_WX__20_12_01_13_45_04]
GO 
-- 添加创建时间、更新时间字段
ALTER TABLE [dbo].[PW_USER] add CRTTIM smalldatetime DEFAULT CURRENT_TIMESTAMP,  
UPDTIM smalldatetime DEFAULT CURRENT_TIMESTAMP
GO

-- 设置数据为当前时间
UPDATE [dbo].[PW_USER] SET [CRTTIM] = (GETDATE()), [UPDTIM] =  (GETDATE()) 
GO

-- 国际惯例
SET ANSI_NULLS ON 
GO
SET QUOTED_IDENTIFIER ON 
GO
-- 创建触发器
CREATE TRIGGER [dbo].[tgr_PW_USER_updtim_PassWordHash]
ON [dbo].[PW_USER]
-- 触发时机、条件
AFTER UPDATE AS  if update (PassWordHash)
BEGIN 
    SET NOCOUNT ON;
    UPDATE [dbo].[PW_USER]
    SET UPDTIM=SYSDATETIME()
    WHERE ID IN (SELECT DISTINCT ID FROM inserted)
END 
GO 
-- 启动触发器
ALTER TABLE [dbo].[PW_USER] ENABLE TRIGGER tgr_PW_USER_updtim_PassWordHash

3、Execute
4、显示返回结果

在这里插入图片描述
再次右键PW_USER,查询前1000条,滚动条拖到最右边,会发现已经有创建时间和更新时间了。

三、添加VBS脚本

我们的目的是在WINCC中提醒用户密码到期,接下来就是VBS脚本上场了。
在这里插入图片描述

添加动作

WINCC管理器中——全局脚本——打开VBS-Editor——选择动作——右键动作——新建——动作
将下列代码复制粘贴进去,再命名保存。(注意第一句Option Explicit 不用复制)

Option Explicit
Function action

Dim UserName,strSQL,updateTime,diffDate
'获取当前登陆用户
Set UserName = HMIRuntime.Tags("@CurrentUserName")

'如果未登录则不提醒
If UserName.Read ="" Then 
	Exit Function 
End If 


'开启数据库连接
Dim sCon
Dim conn
Dim oRs
Dim oCom

sCon = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=byd;Password=byd;"_
&"Initial Catalog=CC_CPME_WX__20_12_01_13_45_04;Data Source=BMDEMO\WINCC"


' 2.1 Make connection
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open

' 2.2 Use command text for query
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn

strSQL="SELECT [UPDTIM]  FROM [PW_USER] where name = '" & UserName.Read & "'"
oCom.CommandText = strSQL

' 2.3 Fill the recordset
Set oRs = oCom.Execute

If oRs.RecordCount > 0  Then 
	Do While (Not oRs.EOF)
		updateTime = oRs.fields(0).Value
		oRs.MoveNext
	Loop
Else
	updateTime = "1970-01-01 00:00:00"
End If 


oRs.Close
Set oRs = Nothing
conn.Close
Set conn = Nothing
diffDate = DateDiff("d",updateTime,Now)

'当修改时间为27-29天时,发出提醒
If diffDate > 27 And diffDate <30  Then 
	Msgbox "您的密码已经"& diffDate &"天未修改,请及时更新密码!"

'当修改时间大于29天时,发出提醒
Elseif  diffDate > 29 Then 
	Msgbox "您的密码已经超30天未修改,请立即修改密码!"
End If  

End Function

设置更新触发频率

在这里插入图片描述
在这里插入图片描述
右键刚刚保存的.bac文件——信息/触发器——触发器——定时器——周期性——添加——触发器名称(1h 可以随便取名)——周期(1小时 按照你实际需求来定)——确定——确定——保存(注意一定要保存!!!

在这里插入图片描述

在这里插入图片描述
基本上到这里就完结了。如果有不明白之处,可以留言私信。

  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值