Windows PowerShell 保持安置!
Don Jones
內容
方案
在 [動作] 中檢視
若要從一對多遠端處理
將它放超出心意
它是遠端管理,新學校樣式
我一定已經因為雙重訊息隨附有時超出 Microsoft 有關 [伺服器管理: 開一方面,我們正在 rightly 告訴我們自己的用戶端電腦上安裝管理工具,並使用這些工具來管理我們的伺服器。 我們不應該要進入資料中心,甚至使用 「 遠端桌面技術上作弊因為它基本上就進入資料中心不必花在查核行程 (Stack Walk)。 另一方面,但是,有許多無法輕易地使用現有的遠端工具執行的伺服器管理工作,例如變更 IP 位址或其他以網路的組態項目。
Windows PowerShell 常見問題
Q Windows PowerShell 指令碼可以作為登入指令碼嗎?
A 是,但有可能不是在如此做的任何點。 您不能只將指令碼拖曳至群組原則] 物件 (GPO),請您可以 VBScript 檔案的方式]。 而,必須基本上建立批次檔執行 Powershell.exe 傳遞命令列參數,告訴它要執行哪些指令碼。 很方便。 您也必須在執行該登入指令碼的每個電腦上安裝 Windows PowerShell。 最後,請記住 Windows PowerShell 更獨立比 VBScript 或 Cmd.exe 殼層。 就例如對應磁碟機使用新增 PSDrive 指令程式不會影響 Windows 檔案總管,您必須改網路使用命令來實際在 Windows 中,磁碟機對應,而且如果您要這樣為什麼不只是使用容易在 GPO 中包含的傳統的批次檔案吗?
Q 可以排定 Windows PowerShell 指令碼嗎?
A 絕對。 您實際上將排程 PowerShell.exe (這位於您 %systemroot%資料夾,/WindowsPowerShell 下),並提供命令列參數,指定您想要執行指令的碼。 請務必排定的工作設定為使用具有執行指令碼執行的任何必要的權限的使用者帳戶,並確定殼層執行原則設定為允許指令碼執行 (我偏好 AllSigned 原則自己,這表示您的指令碼需要將數位簽章,執行 [說明 about_signing] 在殼層中以取得詳細資料的)。
Q 有的簡單的方法來使用檔案及資料夾在 Windows PowerShell 的使用權限嗎?
A 確定。 你要開始使用有 [的 [取得 ACL] 和 [設定 ACL] 命令,取得 ACL 是很好,如果您只需要權限的報表。 坦白說,使用這些命令實際變更權限是很不實用,Windows 的權限是很複雜的野獸,而您只需要設定存取控制清單 (ACL) 程式設計是同樣複雜。 但誰說要使用的指令程式呢? 在執行傳統的命令列工具,非常殼層,而且 Cacls.exe (包括像 Dsacls 的 Active Directory) 的各種反覆項目運作大從 Windows PowerShell 內。 我永遠時使用到它們需要修改,或設定檔案及資料夾的權限。
設定新的 Server Core 安裝是另一個很好的範例。 新增角色、 設定網路、 甚至來啟用 Windows 必須都是從本機主控台視窗,或透過遠端桌面,使用命令列工具來完成。 目前存在哪些工具是自行撰寫點解決方案處理單一工作,或是需要專業技術與 Windows 管理檢測 (WMI 中) 的解決方案。 我喜歡 WMI,但坦白說,大部分的系統管理員要花大量時間的學習太複雜,因此它通常會未使用。
Windows PowerShell 有簡化的承諾,讓 WMI 有點容易處理,但更重要的是藉由包裝成更容易使用 Cmdlet 大致對應,我們已經使用多年的命令列公用程式與系統管理工作。 殼層的問題是,除了從 WMI,它基本上是本機的殼層。 其核心作業系統設定 Cmdlet 的許多沒有提供任何支援連絡遠端電腦。 殼層也不會解決其中一個 WMI 的更 egregious 問題: 它使用遠端程序呼叫 (RPC) 遠端連線。 RPC 的麻煩,以在環境中使用本機的防火牆 (和使用者沒有這些日期?),通常進行 WMI 為任何類型的遠端管理無法使用。
方案
Microsoft 已經知道這些缺點很時,但是它的執行所有所需修正單一產品線一些時間。 該產品是 Windows PowerShell v2,包括新版本的 Windows 遠端管理 (WRM)。 同時將交運 Windows 7 和 Windows Server 2008 R2 中, 第一次,而且兩者會預先在這些作業系統上預設安裝。
技術也會設定為供舊版 Windows 時,可能遠後面以及 Windows XP 的。 但撰寫本文的沒有正式宣告已被建立有關將 (最舊的作業系統更難 Microsoft 的工作,因為較舊版本可能缺少所需的一些核心支援的技術) 支援完全的舊的作業系統。
WinRM 真的是在索引鍵的技術,這可以讓。 WS-MAN 或管理,Web 服務的一個 Microsoft 的實作,當名它使用 HTTP 和 HTTPS 來通訊,表示很容易就通過防火牆的流量。 與 RPC 這在單一的已知點開始,,然後移動到隨機選擇的連接埠的 [其對話不同的是 HTTP 和 HTTPS 利用單一連接埠 (80 及 443 預設,但如果您不喜歡那些設定。 WinRM 允許接聽連入的管理連線的許多不同的應用程式,並且 Windows PowerShell v2 是一個應用程式能夠執行這項作業。 (個人,我認為 WMI 最後可能會移轉到使用 WinRM)。
基本上,您坐在用戶端電腦上,並要求,命令介面連線到遠端電腦。 遠端輪流旋轉安裝在遠端電腦上的 Windows PowerShell v2 的執行個體的電腦上啟動 WinRM。 殼層的執行個體都可以執行您的命令,並將結果傳送回到您的電腦。
在 [動作] 中檢視
Windows 7 在公用的 Beta 版本是第一次在大型世界可以試試看: 開啟伺服器上的 Windows PowerShell 工作階段 (或多個伺服器上 — 並執行設定 WinRM 並啟動 WinRM 服務的啟動 PSRemoting。 請到您的用戶端電腦,也有執行 Windows PowerShell v2 — 並執行 $ 工作階段 = 新增 PSSession 電腦名稱針對遠端處理提供您設定的伺服器的名稱。 如果需要並告知的話,您已經設定,請使用非標準連接埠新增 PSSession 指令程式也可以接受替代的認證。
如果您看到冗長的錯誤訊息,如 [ 圖 1 ] 所示,很是由於方式 WinRM 驗證。 它會依預設值,使用 Kerberos 但是在非網域環境中 (如附圖實驗室電腦上),Kerberos 的選項。 Kerberos 無法使用時, WinRM 要求需要在伺服器電腦上安裝 SSL 憑證 HTTPS 傳輸站的使用。 這是為了提供您與伺服器之間的相互驗證,讓您知道您連線到您想要的電腦。 –auth 參數在即使指定的基本或摘要式驗證不會幫助,因為 WinRM 想要使用 HTTPS 加密該流量。 最簡單的解決方案? 是的 Active Directory 網域中 !
[圖 1 冗長的錯誤郵件像這可能是因為 wayWinRM 驗證
您啟動的工作階段,您就可以開始使用它。 輸入 PSSession $ 工作階段會連線您,即時,到遠端伺服器。 魔法給封住了,您要輸入其 Windows PowerShell 執行個體中。 以互動方式執行命令,然後您立即查看結果 (不與 SSH 或類似的技術通常用於 UNIX 電腦上不同。
Windows PowerShell 甚至會部分的預設加密,不使用 HTTPS 您是否仍然竊聽很安全。 執行結束-PSSession 以中斷遠端主控台,並回到您的本機主控台。 當您連線至要提醒您您所在的一個遠端電腦時,命令介面提示甚至變更。
若要從一對多遠端處理
能夠在一部電腦上執行命令是很好的但是頻率執行您需要執行一個伺服器上的一個動作嗎? 更就常找我需要在整個的一連串的電腦上執行一個的指令或一組指令。 為何我們到目前為止在使用 Windows PowerShell v1 稱為一對一的 (1: 1) 遠端表示是單一的系統管理員管理單一的遠端電腦。 但 Shell 也提供一個一對多 (1:n) 遠端處理是單一的系統管理員可以管理多台電腦的位置。 訣竅是新增 PSSession –computerName 參數。
讓我重複我先前] 指令,但這次我將實際拼出參數而不是讓殼層假設它: 新增 PSSession –computerName 電腦。 因為 –computerName 是位置參數,不需要稍早,指定實際的參數名稱,但現在執行這項作業會讓這個技巧更容易瞭解: $ 工作階段 = 新增 PSSession –computerName (取得內容 c:\names.txt)。 假設 C:\names.txt 檔案包含電腦名稱的清單,每行,一個電腦名稱,然後殼層就會建立它們將整個清單的工作階段儲存在 $ 的工作階段變數中的每個遠端工作階段。
根據預設值,工作階段會建立使用任何 Windows PowerShell 本身的認證下執行,因此,我登入帳戶我使用 RunAs 啟動殼層時。 一個字的警告: 如果您使用者帳戶控制 (UAC) 啟用務必明確地在其圖示上按一下滑鼠右鍵的 「 以系統管理員 」 啟動殼層。 或者,您也可以使用命令的 –credential 參數],工作階段指定不同的使用者名稱。
一旦您有此命令的集合時,您可以繼續使用它們以 1: 1 的方式: 輸入 PSSession $ 工作階段 [0] 將您連線到第一部電腦的殼層執行個體,例如。 但真正的威力並在同時對所有的執行命令: 叫用命令 –scriptblock {ipconfig} 0 –session $ 工作階段。 會執行您要連接一個的工作階段每台電腦上的 Ipconfig 指令,並且將結果帶回到您的電腦。 它會實際連接到電腦的平行,往上一次的 32,; 您可以藉由使用 –throttlelimit 參數變更該平行執行節流閥]。
將它放超出心意
就當然有時候會引發命令,花一些時間來執行,關閉,而您可能不想要坐周圍等候所有完成的項目。 在這類的情況下,為什麼不讓命令介面在背景中繼續工作? 只將 –AsJob 參數加入叫用命令的並且殼層將建立背景工作。
請記住命令介面的複本不真正執行的工作量,您指定的命令正在執行的 Windows PowerShell 遠端執行個體上。 您殼層只等候的全部完成,並收集結果它們傳送回]。 這些結果會儲存工作的一部分。 執行 Get-工作以查看所有目前的工作和狀態 (是否它們仍然執行,例如)。 您可以使用接收工作按住出已完成的作業的結果。 因此它所有可能如下所示:
$sessions = New-PSSession –computerName (Get-Content c:\names.txt)
$job = Invoke-Command –scriptblock { your command(s) } –AsJob
Get-Job (to check the status)
$results = Receive-Job $job
您可以再 $ 結果顯示、 篩選、 排序,等等。 每個搜尋結果會有附加至幫助您查看它是來自哪台電腦的資訊。 我將討論背景工作 (其甚至可以讓您必須處理的 sub-jobs) 在未來的文章。
它是遠端管理,新學校樣式
忘了舊學校方式牽涉到資料中心健行,或使用一個遠端桌面的 「 遠端管理的"使用。" Windows PowerShell v2 的遠端功能是功能強大且簡單的方法執行命令) 的任何指令,在遠端電腦上。 雖然我個人的焦點是在 [伺服器管理,這些相同的技巧非常適合在桌面的管理工作,就也也就是為什麼 Windows PowerShell v2 是預先安裝 Windows 7,以及 Windows Server 2008 R2 的原因之一。
Don Jones 是的一個 co-founder 集中的技術他的部落格,Windows PowerShell,SQL Server,App-V 有關的每週及其他主題。 請連絡他透過他的網站。