写了个powershell来针对离职的自动化执行。
结合sql数据库的目的是更自动化,并保存一些用户信息到数据库中
powershell代码可手动执行,也可计划任务执行sql
数据库(如下我所用的方法,不能直接套用)
主要3张表
员工表Userlist记录员工在离职状态,加触发器,当是否离职状态改变自动加入离职员工表leftuser中
离职员工表leftuser结构以下,前提有工号和ad帐号的对应关系表
离职用户所在组表leftusergroup,记录离职用户以前所在的组。shell
CREATE TABLE [dbo].[leftUser]( [lid] [int] NULL, ---i [wid] [varchar](3) NULL, --工号 [workStatus] [bit] NULL, --是否离职 [aduser] [nvarchar](5) NULL --ad帐号 ) ON [PRIMARY] GO
Powershell代码数据库
################ #Author:rp722 #version:6 ################ #配置信息 $Database = 'DatabaseUserName' $Server = '"ipaddress"' $UserName = 'sa' $Password = 'password' #建立链接对象 $SqlConn = New-Object System.Data.SqlClient.SqlConnection #使用帐号链接MSSQL $SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password" #打开数据库链接 $SqlConn.open() #查询数据库,获取当前离职用户表中用户数量 $SqlCmd = $SqlConn.CreateCommand() $SqlCmd.commandtext = 'select COUNT(aduser) from leftUser' $num=$SqlCmd.ExecuteScalar() #遍历用户 for($i=1;$i -le $num;$i++) { $SqlCmd = $SqlConn.CreateCommand() $SqlCmd.commandtext = "select aduser from leftUser where lid=$i" $user=$SqlCmd.ExecuteScalar() #获取用户 $aduser=Get-ADUser -Identity $user #判断用户在AD中是否启用,若已禁用则跳过 if ($aduser.enabled -eq $True) { #获取用户所在组 $groups=(get-aduser $user -properties memberof).memberof #遍历各组 foreach($gp in $groups) { #获取组的名称 $gp1=$gp.Split(",")[0].Split("=")[1] #保存用户和组的对应关系到数据库 $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.connection = $SqlConn $SqlCmd.commandtext = "insert into dbo.leftusergroup(aduser,gname) values('$user','$gp1')" $SqlCmd.ExecuteNonQuery() #当前组内移除用户 remove-adgroupmember -Identity $gp -Members $user -Confirm:$false } #设置备注 set-aduser $aduser -Description "user has left company" #已至禁用组 Move-ADObject $aduser -TargetPath "OU=Disabled,DC=xxxx,DC=net" #禁用帐户 Disable-ADAccount $aduser } } #关闭数据库链接 $SqlConn.close()