ユーザ登録用スクリプト_その1
ひとまずACCESSのデータベースから値を拾ってきてActiveDirectoryと外部メールサービスに新規ユーザを追加するVBスクリプトを作ってみた。どこかで再利用するかもしれないから保存しとく。ずぶの素人が作成しているのでソース汚いのはお約束で・・・・
以下、メインの処理 を
・EXCELからデータを引いてきて、データを加工しACCESSに登録
・ACCESSからデータを抜いてADとメールサーバにデータ登録
・結果をEXCELに登録しつつ、完了メール送信
てな塩梅です。
以下、メインの処理 を
・EXCELからデータを引いてきて、データを加工しACCESSに登録
・ACCESSからデータを抜いてADとメールサーバにデータ登録
・結果をEXCELに登録しつつ、完了メール送信
てな塩梅です。
Option Explicit Dim Logrtn 'Log Dim CErrMsg Dim LErrMsg CErrMsg = "エラー:処理継続不可" LErrMsg = "エラー:ログ出力時エラー" Dim cn, rs 'ACCESSデータベース Dim objFso 'ファイル存在チェック用 Dim DataBaseName Dim strSQL Dim ExcelName Dim EmpDate '現在日付取得 Dim EmpNo Dim rsCount 'レコード件数取得用 Dim strName Dim strKnName Dim strPlace Dim Section Dim EmpLank Dim EmpStat Dim strLoginID 'WindowsログインID Dim strLoginPW 'WindowsログインPW Dim strPMailAdd 'メールアドレス Dim strPMailPW 'メールアドレスパスワード Dim AdColum Dim MailColum AdColum = "X" 'EXCELの列 MailColum = "X" 'EXCELの列 Dim EmpMrtn Dim Adrtn Dim AdGrtn Dim Mlrtn Dim Mlsndrtn Dim Excelrtn Dim adCounter Dim mailCounter '***ACCEESS(入力) DataBaseName = "C:\XXX.accdb" '***EXCEL(出力) ExcelName = "C:\XXX.xls" '当日日付取得(m/d/yyyy形式) EmpDate = Month(Now) EmpDate = EmpDate & "/" & Day(Now) EmpDate = EmpDate & "/" & Year(Now) EmpMrtn = ExcelToAccess(ExcelName,DataBaseName,EmpDate) If EmpMrtn = "False" Then WScript.Echo CErrMsg Logrtn = OutLogger("[Err],ACCESSデータベース登録処理でエラーが発生しました。入社チェックリストを確認してください。") If Logrtn = "False" Then WScript.Echo LErrMsg End If WScript.Quit() End If 'ACCESSデータベースオープン 参照:http://pnpk.net/cms/archives/3226 Set objFso = CreateObject("Scripting.FileSystemObject") If objFso.FileExists(DataBaseName) Then Set cn = CreateObject("ADODB.Connection") cn.CursorLocation = 3 ' クライアントサイドカーソルに変更(レコードセットカウント対策) Set rs = CreateObject("ADODB.Recordset") cn.Open "Provider = Microsoft.ACE.OLEDB.12.0; " & _ "Data Source = " & DataBaseName & ";" Else WScript.Echo CErrMsg Logrtn = OutLogger("[Err],ACCESSデータベースに入社対象者が存在しません。ACCESSデータベースを確認してください。") If Logrtn = "False" Then WScript.Echo LErrMsg End If Set objFso = Nothing WScript.Quit() End If Set objFso = Nothing 'SQL発行 strSQL="" strSQL= strSQL & "SELECT ACCESSデータベース.[KeyCD], " strSQL= strSQL & " FROM ACCESSデータベース " strSQL= strSQL & " WHERE (((ACCESSデータベース.対象日)> " strSQL= strSQL & "#" & EmpDate & "#" & ")" strSQL= strSQL & " AND " strSQL= strSQL & " AND " strSQL= strSQL & "((ACCESSデータベース.));" Set rs =cn.Execute(strSQL) 'ACCESSデータベースSQL実行 rsCount = rs.RecordCount If rsCount = 0 Then Set rs = Nothing Set cn = Nothing WScript.Echo CErrMsg Logrtn = OutLogger("[Err],処理対象が0件です。") If Logrtn = "False" Then WScript.Echo LErrMsg End If WScript.Quit() End If If rs.Eof Then Set rs = Nothing Set cn = Nothing WScript.echo "対象0件:処理が完了しました。" Logrtn = OutLogger("[Worn],追加対象なし。") If Logrtn = "False" Then WScript.Echo LErrMsg End If WScript.Quit() Else rs.MoveFirst End If '//** ユーザ登録処理 ' 参照:http://d.hatena.ne.jp/masahiror/20070706/ad_vbs adCounter=0 Do Until rs.Eof = True EmpNo = rs("XXX") strName = rs("XXX") strLoginID = rs("XXX") strLoginPW = rs("XXX") strPMailAdd = rs("XXX") strPlace = rs("XXX") Section = rs("XXX") '*** ActiveDirectoryユーザ追加 strName=Replace(strName," ","") Adrtn = ActiveDirectoryAdd(strName,strLoginID,strLoginPW,strPMailAdd,strPlace) 'エラー時は処理終了 If Adrtn = "False" Then WScript.Echo CErrMsg Logrtn = OutLogger("[Err]," & StrName & ":追加中にAD登録エラーが発生しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If Set rs = Nothing Set cn = Nothing WScript.Quit() End If '***グループ追加 AdGrtn = ADGroupAdd(strName,Section) 'エラー時は処理終了 If AdGrtn = "False" Then WScript.Echo CErrMsg Logrtn = OutLogger("[Err]," & StrName & ":グループ登録に失敗しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If Set rs = Nothing Set cn = Nothing WScript.Quit() End If 'EXCELに結果入力」 Excelrtn = ExcelSheetInput(EmpNo,AdColum,ExcelName) If Excelrtn = "False" Then Logrtn = OutLogger("[Err]," & StrName & ":EXCEL入力の際にエラーが発生しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If End If Logrtn = OutLogger("[Done]," & StrName & ":ActiveDirectoryのアカウント追加完了") If Logrtn = "False" Then WScript.Echo LErrMsg End If rs.MoveNext adCounter=adCounter+1 Loop Logrtn = OutLogger("[Done],ActiveDirectoryのアカウント追加完了" & "処理対象:" & adCounter & "件") If Logrtn = "False" Then WScript.Echo LErrMsg End If '/* ActiveDirectoryとメールサーバの処理を切り分けるため初期レコードに戻す。 rs.MoveFirst mailCounter=0 Do Until rs.Eof = True EmpNo = rs("XXX") strName = rs("XXX") strPMailAdd = rs("XXX") strPMailPW = rs("XXX") Mlrtn = MailSrvAdd(strName,strPMailAdd,strPMailPW,strPlace) 'エラー時は処理終了 If Mlrtn = "False" Then WScript.Echo CErrMsg Logrtn = OutLogger("[Err]," & StrName & ":メールサーバ登録エラーが発生しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If Set rs = Nothing Set cn = Nothing WScript.Quit() End If 'EXCELに結果入力 Excelrtn = ExcelSheetInput(EmpNo,MailColum,ExcelName) If Excelrtn = "False" Then Logrtn = OutLogger("[Err]," & StrName & ":EXCEL入力の際にエラーが発生しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If End If Logrtn = OutLogger("[Done]," & StrName & ":サーバへのメールアカウント追加完了") If Logrtn = "False" Then WScript.Echo LErrMsg End If rs.MoveNext mailCounter=mailCounter+1 Loop Logrtn = OutLogger("[Done],メールサーバのアカウント追加完了" & "処理対象:" & mailCounter & "件") If Logrtn = "False" Then WScript.Echo LErrMsg End If 'SQL発行 strSQL="" strSQL= strSQL & "UPDATE ACCESSデータベース SET ACCESSデータベース.XXX = '' " strSQL= strSQL & "WHERE ((ACCESSデータベース.XXX='" & EmpNo & "'));" If Err.Number <> 0 Then ExcelToAccess = "False" Logrtn = OutLogger("[Err],"& EmpNo & ":更新中にエラーが発生しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If Else Set rs =cn.Execute(strSQL) End If Mlsndrtn = CompMailSend(EmpNo,ExcelName) If Mlsndrtn = "False" Then WScript.Echo CErrMsg Logrtn = OutLogger("[Err],メール送信処理でエラーが発生しました。") If Logrtn = "False" Then WScript.Echo LErrMsg End If WScript.Quit() End If WScript.echo "処理完了" Set rs = Nothing Set cn = Nothing
コメント