Gavin's Linux學習手札
關於部落格
原本這個 Blog 是用來記錄研究 Linux 的學習過程, 後來變成記錄生活與工作, 這個 Blog 裡的文章已成為我不可缺少的回憶。
  • 522631

    累積人氣

  • 4

    今日人氣

    0

    訂閱人氣

用 PowerShell 自動匯入門禁卡號至 AD 欄位

 因為現在已經沒人在用呼叫器了,所以就將門禁卡號放在"呼叫器"這個欄位中。

 
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"


相簿設定
標籤設定
相簿狀態