寫了個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()