Windows

電源外殼?你用它嗎?你能告訴我一些我可以用它做的很酷的系統管理嗎?

  • December 11, 2014

我一直在讀到PowerShell是未來的發展方向。當它第一次發佈時,我做了一大堆虛擬實驗室,但從那以後我仍然沒有在生產環境中使用它。我知道有一天我會處理已經安裝的作業系統,所以我想做好準備。

我想知道:

  1. 你用它嗎?
  2. 使用 PowerShell 的“引導”過程是什麼?
  3. 您使用它編寫了什麼樣的系統管理任務?
  4. 我是 SQL Server 數據庫管理員。有什麼很酷的事情與它有關?

似乎每個人都同意微軟正在努力推動這一點,但還沒有人真正使用它。我想听聽那些使用它來完成日常任務並分享一些程式碼範例的系統管理員。

Microsoft 正在盡其所能使 PowerShell 成為世界各地高級使用者和自動化編寫者的選擇。為了做同樣的事情而在 .NET 中編譯程式碼的日子已經一去不復返了,現在您只需要 notepad.exe 和 google。我們在辦公室是它的忠實擁護者,尤其是因為 Exchange 2007 的管理控制台不包括您可以在 PowerShell 中執行的所有操作。微軟故意沒有實現那些只在很長一段時間內完成的事情,這樣更容易開發,如果你有任何類似於復雜環境的東西,這完全會迫使它使用。

管理微軟新一代產品(Win7、Windows Server 2008、Exchange 2007/2010、SQL Server 2008)都有非常豐富的PowerShell hook。一旦 Remote Powershell (PowerShell 2.0 IIRC) 與 Server 2008 R2 一起部署,它將對自動化編寫者變得更加有用。

我們用它做了什麼:

  • 創建一個網頁以將某些管理任務委派給幫助台使用者。該網頁觸發在 PowerShell 中執行的命令。它做的事情:

    • 創建和刪除使用者帳戶,包括設置 Exchange 2007 郵箱和主目錄
    • 解鎖鎖定的帳戶
    • 創建/刪除組
    • 從組中添加/刪除使用者
    • 在郵件儲存之間移動使用者
    • 設置密碼
  • 每晚從 ERP 系統中提取數據並將全球地址簿數據推送到 Active Directory 中。

  • 解決我們從 Exchange 2003 遷移到 Exchange 2007 時出現的 LegacyExchangeDN 問題。必須為曾經在 Exchange 2003 上的每個人添加一個 X500 地址。一個相當短的 PowerShell 腳本修復了它。

  • 腳本創建“組郵箱”(Exchange 中的共享郵箱,其中多個使用者可以訪問郵箱),否則由於我們在啟動之前需要的數據的性質,這是一個手動過程。它極大地標準化了這些郵箱的設置。

  • 創建了一個腳本,該腳本遍歷所有域電腦,重置特定系統資料庫項並重新啟動服務。花了18個小時才完成,但它完成了工作。

所以,是的,PowerShell 將伴隨我們一段時間。

編輯:添加程式碼範例,因為它被要求

$list=import-csv("groupusers.csv")
$lastseengroup=$list[0].group
$ADGroupPrefix="grp.netware."
$ADGroupSuffix="{redacted -- 格式為 ,ou=groups,dc=domain,dc=domain,dc=domain}"
清除變數成員列表
清除變數未知使用者
foreach ($list 中的 $entry) {
if ($($entry.group) -ne $lastseengroup) {
echo "偶然發現了新組 $($entry.group),正在對 $lastseengroup 進行更改"
$newgroup=$ADgroupPrefix+$lastseengroup
$newgroupdn='"'+"cn=$newgroup$ADGroupSuffix"+'"'
echo "獲取 $newgroup 的 DN"
$existinggroup=dsquery 組 domainroot -name $newgroup
if (($existinggroup -ne $null)) {
dsmod 組 $newgroupdn -chmbr $memberlist
} 別的 {
dsadd group $newgroupdn -scope u -secgrp yes -members $memberlist -desc "從 eDirectory 導入的組"
}
清除變數成員列表
}
$User=get-user $($entry.member) -ErrorAction SilentlyContinue
if ($User.isvalid) {
$UserDN=$User.distinguishedname
$memberlist=$memberlist+'"'+"$UserDN"+'" '
} 別的 {
$unknownusers=$unknownusers+$($entry.member)
}
$lastseengroup=$($entry.group)

}
dsadd group "cn=$ADGroupPrefix$lastseengroup$ADGroupSuffix" -scope u -secgrp 是 -members $memberlist

這需要使用 perl 腳本創建的 CSV 文件並更新一組組。如果該組已經存在,它會將成員資格替換為文件中指定的成員。如果組不存在,則創建它。這是一種單向同步。此外,還沒有完全投入生產,但已經接近了。

引用自:https://serverfault.com/questions/13493