ユーザ登録用スクリプト_その1

ひとまずACCESSのデータベースから値を拾ってきてActiveDirectoryと外部メールサービスに新規ユーザを追加するVBスクリプトを作ってみた。どこかで再利用するかもしれないから保存しとく。ずぶの素人が作成しているのでソース汚いのはお約束で・・・・
以下、メインの処理 を
 ・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

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)