因為現在已經沒人在用呼叫器了,所以就將門禁卡號放在"呼叫器"這個欄位中。
PowerShell Script
Import-module ActiveDirectory
#匯入卡號資料
Import-CSV "D:CardNum.csv" | % {
#指定變數
$USERID = $_.UserID $CARDNO = $_.CardNo
#讀取 AD 上的卡號屬性
$ADPAGER = get-aduser -filter {samAccountname -eq "$USERID"} -properties *|select pager
#截取卡號
if ($ADPAGER) { $ADCARDNO = ("$ADPAGER").substring(8,10) }
#比對卡號不一致或為空值
if ($ADCARDNO -ne $CARDNO -or !$ADPAGER) { #寫入新卡號 set-aduser $USERID -replace @{pager=$CARDNO} } } |
Import-module ActiveDirectory
因為要更新 AD 欄位,所以必須要載入 ActiveDirectory 的模組,才能使用 AD 管理的相關指令。
Import-CSV "D:CardNum.csv"
指定 CSV 檔案的路徑匯入進來。
$USERID = $_.UserID
$CARDNO = $_.CardNo
$_UserID 及 $_.CardNo 是對應 CardNum.csv 檔內的欄位名稱。
$ADPAGER = get-aduser -filter {samAccountname -eq "$USERID"} -properties *|select pager
因為不想讓程式不管卡號有沒有異動,所有帳號的卡號欄位都重新寫入,所以讀出 AD 上的卡號欄位,做為後續判斷的依據,但該行指令讀取出來的格式會是
pager
-----
1000011502
實際儲存的格式是
@{pager=1000011502}
所以要用涵數截取所要的卡號格式
if ($ADPAGER) { $ADCARDNO = ("$ADPAGER").substring(8,10) }
判斷 AD 上的卡號欄位是否為空值,若是為空值就不用截取卡號,若反之,則將 "@{pager=1000011502}" 截取 "1000011502" 出來。
if ($ADCARDNO -ne $CARDNO -or !$ADPAGER)
若 AD 上的卡號欄位與 CSV 上的卡號不一致,或 AD 上的卡號欄位為空值才執行更新。
set-aduser $USERID -replace @{pager=$CARDNO}
將 CSV 上的新卡號寫入 AD 上的卡號欄位。
將 PowerShell Script 存成 .ps1 的檔案後,再到 Windows 排程輸入下列指令設定定時執行,即可每天自動更新卡號至 AD中。
PowerShell -ExecutionPolicy ByPass -File D:Update_CardNo.ps1"
沒有留言:
張貼留言