Windows PowerShell 自動化使用者提供,第 2 部

Don Jones

內容

建立使用者
遺失 Exchange?
選項的選項選項

這個資料行的先前的單元,我會建立基礎的自動化的使用者提供的指令碼。 我建立一個呼叫是設計來從 CSV 檔案中讀取使用者資訊,並傳回 Hashtable) 的形式的該項資訊的 ProvisionInputCSV 的函式。 我採用的方法,因為它允許我再建立多個其他匯入 」 功能 — 匯入從資料庫,匯入在的試算表或任何從 — 而且有每一個傳回的相同尋找 Hashtable。 我實際的佈建函式只需要接受的 Hashtable 其中可能包含的使用者的第一個名稱、 最後一個名稱、 City、 部門和等項目。

在本月的專欄中,我就可以開始使用的 Hashtable 建立新的、 擁有信箱功能的使用者在 Active Directory (或不具信箱的使用者,),如果您無法在使用 Exchange Server 2007。

佈建的函式的基本架構看起來如下:

Function Provision {
  PROCESS {
  }
}

我已經已建立函式將會收到在它將會存取透過特殊 $ _ 變數內,PROCESS scriptblock 管線 Hashtable。 在 Hashtable,會有對應到使用者屬性 (Attribute) 的金鑰,所以這些機碼的值將會包含每個使用者的資訊]。 某些範例包括:

  • $ _ [' sn '] ="Jones"
  • $ _ ' [givenName '] ="Don
  • $ _ ' [samAccountName '] ="donj

可用的實際屬性將視您已將您 ProvisionInputCSV 函式或其他匯入函式。

請記住使用者提供通常牽涉到幾個的步驟如建立的帳戶,建立一個的資料夾等。 很容易堅持到我的佈建函式的所有這些工作,但這樣做,會讓函式相當複雜 —,偵錯及疑難排解複雜的多個表示困難。 而,我將使用佈建函式做為主要的工作] 清單的排序出每個工作分成它自己的子函式。 在的最後,佈建函式看起來像這樣:

Function Provision {
  PROCESS {
    CreateUser $_
    CreateHomeFolder $_
    AddToGroups $_
    UpdateAttributes $_
  }
}

Windows PowerShell Q & A

問: 我在非常多的 Cmdlet 上看 –computerName 參數。 Windows PowerShell 用來管理遠端電腦嗎?

A Windows PowerShell 版本 1 的遠端處理功能有限。 Get-WmiObject cmdlet 提供您可能已經發現-computername 參數,以便您可以從一或多個的遠端電腦中擷取資訊就像這樣:

Get-WmiObject Win32_Service –computerName
  "localhost","server2","server3"

但這是有關 Windows PowerShell 的第一個版本中,只有內建遠端管理功能。

不過,其他的技術,請如 Exchange 伺服器和 Active Directory,是原本就是 「 遠端 」 — 也就是,用戶端電腦會知道它在不是郵件的伺服器或網域控制站,並將適當的連絡人的一個為。 因此您實際上不需要-computername 參數的命令,使用這些技術。

每一個四個附帶的函式處理其中一項主要工作,我所述這的一系列的第一部分,並每個正在傳遞完整的使用者的資訊集 $ _ 變數中的]。 因此有 — 是我提供的指令碼 !

建立使用者

只要 kidding。 顯然我還需要撰寫實際在這些四個附帶的函式的功能。 在這個單元中,我會著重在 CreateUser 函式。 這個程式碼的第一個反覆項目會假設您有 Exchange Server 2007 在您的環境中。 (抱歉,這無法用於較舊版本的 Exchange Server)。 在您執行這個指令碼中使用的任何電腦必須在 Exchange Server 管理工具安裝,而且您將必須確定載入 Windows PowerShell 的 [Exchange Server 嵌入式管理單元。 若要檢查,請執行 Get-pssnapin,並查看是否列出的]。 如果沒有,執行 Get-pssnapin-請確定登錄它的安裝。 再,如果將嵌入式管理單元載入殼層中,請執行此:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin. 

如果您收到對輸入該命令的您可以將它加入指令碼,包含所有提供的函式或者您可以將它到您的 Windows PowerShell 設定檔,以載入當您開啟殼層。 (我說明如何建立自訂的設定檔在 10 月 2008 這個的資料行的 」 設定檔的威力."

以下是我的函式,基本架構:

Function CreateUser {
  Param($userinfo)
}

請注意我已經包含指示殼層我預期哪些參數在參數區塊。 當我呼叫這個函式時,我傳入的 Hashtable 會自動儲存在 $ userinfo 變數中。

以下是的另一個要寫入這一種方法:

Function CreateUser($userinfo) {
}

這個語法會具有完全相同的效果。 不過,殼層使用第一個版本內部讓我傾向使用自己的版本。 我也想會使用參數區塊讓函式更容易閱讀下這條路。

在的函式我需要執行一個命令: 新信箱。 這實際上不會只是建立新的信箱 ; 它也會為新的使用者建立在 Active Directory 中。 我需要知道的資訊,最多前,幾個包括希望儲存信箱信箱資料庫。 基本的語法看起來如下 (這是真的所有長的單一命令列):

New-Mailbox –UserPrincipalName don@concentratedtech.com 
  -alias DonJ 
  –database "Storage Group 1\Mailbox Database 1" 
  –name Don Jones 
  –organizationalUnit Users 
  –password $password 
  –FirstName Don 
  –LastName Jones 
  –DisplayName "Don Jones" 
  –ResetPasswordOnNextLogon $true

您可以看到我需要提出的新使用者密碼,並決定哪個 OU (組織單位),將使用者到。 (在這個範例中,使用者 」 是技術上容器,不 OU,但命令將會接受任何)。 我可以假設我 ProvisionInputCSV 函式已修改,以產生所有我需要預期 $ userinfo 變數,以包含下列的 ­minimum 資訊:

  • UPN (使用者主要名稱)
  • OU (目的地 OU)
  • MailDatabase
  • givenName (名字)
  • sn (最後一個名稱)
  • samAccountName (這我將使用為 '別名' 中)

讓我下列函式:

Function CreateUser {
  Param($userinfo)

New-Mailbox –UserPrincipalName $userinfo['upn'] 
  -alias $userinfo['samAccountName'] 
  –database $userinfo['mailboxDatabase'] 
  –name ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –organizationalUnit $userinfo['ou'] 
  –password 'P@ssw0rd!' –FirstName ($userinfo['givenName'] 
  –LastName $userinfo['sn']) 
  –DisplayName ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –ResetPasswordOnNextLogon $true
}

(再次,命令應該是單一行但是我已分割它方便摘要到這裡)。 結合我佈建和 ProvisionInputCSV 函式,這個函式會建立新的使用者並讓它們擁有信箱功能。

一些有趣的事情是值得注意的是以下:

  • 在命令中執行任何動作是區分大小寫的雖然 Active Directory 會保留在等名稱中使用任何大小寫。
  • 我進行-名稱和-displayName 的運算式做為值的參數。 我括在括弧內) 運算式,請確定殼層會評估運算式,而且傳遞,參數的結果。 這項技術可讓我使用 givenName] 和 [sn 屬性 (Attribute) 來建構完整的名稱。
  • 我已經硬式編碼暫存的密碼,而不是其中一個組成。 組成的密碼會需要能夠進行通訊的使用者,密碼,而且超出這個討論的範圍的。
  • 變數 $ true 和內建的殼層,代表布林值 True (False) 的相反)。

遺失 Exchange?

Windows PowerShell 將有助於建立擁有信箱功能的使用者,如果您未在使用 Exchange Server 2007。 不過,您仍然可以在 Active Directory 中建立基本的使用者帳戶。 若要這樣做您需要可用的 Active Directory Cmdlet 的 Windows PowerShell 中,可在 www.Quest.com/powershell. 安裝,您會執行您的指令碼,並將嵌入式管理單元加入至殼層,藉由執行這電腦上:

Add-PSSnapin Quest.ActiveRoles.ADManagement 

請注意嵌入式管理單元的名稱會包含商業的任務產品 (ActiveRoles 伺服器) 的名稱,但您不需要的產品中才能使用 Cmdlet 在嵌入式管理單元。

您將使用新 QADUser 命令,CreateUser 函式執行起來像這樣:

New-QADUser –samAccountName $userinfo['samAccountName'] 
  –parentContainer $userinfo['OU'] 
  –FirstName $userinfo['givenName'] 
  –LastName $userinfo['sn'] 
  –Name ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –UserPrincipalName $userinfo['UPN'] 
  –displayName ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –userPassword "P@ssw0rd!" | Enable-QADUser

請注意我已經傳送這個命令的輸出,其中包含新建立的使用者 — 至第二個命令,可讓使用者帳戶。 您可以決定是否適合您環境的設計。

新 QADUser 命令會有許多您用來設定其他的 Active Directory 屬性的參數,但我在離開此命令以-,使其更平行與 Exchange Server 版本。 我將會填入其他屬性,在這個指令碼的最後一部分。

選項的選項選項

即使您執行 Exchange Server 2007 時,您可能仍然希望使用 New-QADUser,來建立使用者帳戶。 這樣當然讓您更多的彈性,這個命令可以處理任何目錄屬性。 並新 QADUser 會使您的指令碼與任何的環境 Exchange Server 2007 使用中。

如果您 Exchange Server 2007 您可以使用新信箱的替代的語法來建立信箱,並將剛建立 Active Directory 帳戶將它連結。 您會發現 Windows PowerShell 通常提供數個不同的方式執行的動作,正確的方法就是通常是最適合您的學習有關最少。

下個月,我將介紹提供一些進一步的函式,藉由建立使用者的主資料夾,並套用的權限的存取控制清單 (ACL),到 [資料夾。 ACL 是特別難以使用,而且您可能會驚訝技術,可協助您取得輕鬆完成工作 Windows PowerShell]。

Don Jones 是 Pluralsight 的創始人之一,該公司 集中的技術每週有關 Windows PowerShell,SQL Server,App-V 他的部落格及其他主題。 請聯絡他透過他的網站。