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小时 按照你实际需求来定)——确定——确定——保存(注意一定要保存!!!)
基本上到这里就完结了。如果有不明白之处,可以留言私信。