我有一個 Microsoft 網域(主要是 2008r2\7)。
我正在尋找一種在加入網域(無需用戶登入)後(重新啟動後)立即運行腳本的方法,但到目前為止我失敗了。
另外,我希望它只運行一次,因此安排重複的任務不是一個選項。
在我看來,讓它一遍又一遍地運行是一種浪費。
我嘗試過使用啟動腳本的 GPO,但是當電腦在啟動之後才收到 GPO。
我還嘗試過使用排程任務(具有不同觸發器)的 GPO,但它們也不起作用:
「啟動時」觸發器與啟動腳本失敗相同。
我猜“在任務創建時”失敗是因為它不是以通常的方式創建的。
「按計劃」是無關緊要的,因為我需要它在加入後立即運行(並且設定已經過去的日期不起作用)。
找不到任何相關的註冊表項,但我認為它們會遇到與 GPO 啟動腳本相同的問題。
唯一可以滿足我需要的想法是將任務附加到 DC 上的相關事件,並遠端執行腳本。
還有更好的建議嗎?
--編輯--
根據答案(很好,但還不夠),我有幾點要補充:
1.這個問題適用於兩台伺服器(2008r2\2012\2012r2),儘管我已經只在 2012r2 上測試。
2.我正在尋找一種更像runonce的解決方案,這意味著我不希望它無休止地運行,直到我滿足某些條件。
3. 我們使用映像來部署伺服器和工作站,但我無法使用涉及編輯它們的解決方案,因為 a) 這需要我在每次需要更改腳本中的某些內容時更新它們 b) BYOD。
4. 我們不使用連接腳本(我們根本不需要連接腳本...),因此在我看來開始使用連接腳本是一種浪費。此外,它還存在一些問題(例如,我應該把它放在哪裡?在圖像中?在共享位置?BYOD 怎麼樣?這會破壞第 3 點)。
謝謝。
答案1
將自訂登錄項目新增至您的建置映像中,只需在某處新增一個簡單的「1」值即可。
新增一個排程任務來檢查建置映像的登錄機碼值,在此登錄機碼中新增對您的網域的檢查
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
如果發現兩者都運行您的腳本,則在完成時將自訂註冊表項變更為 0。讓此任務在啟動時運行。
然後,您可以按原樣保留此任務,或使用 gpo 刪除排程任務。但是,如果您將其保留在原處並且需要重新運行腳本,則只需將註冊表項更改回 1 並重新啟動即可。
輕微的安全性問題是計劃任務需要以本機管理員帳戶執行。
答案2
加入網域後不需要重新啟動嗎?如果您建立了啟動腳本,它將在重新啟動後立即套用,此時它會載入其他群組原則物件。
您現在如何加入網域?您也可以將加入網域整合到您的腳本中。在 Powershell 中,這是透過 Add-Computer 完成的,您可以從命令列使用 netdom。
如果您使用組態管理工具,通常您會將其整合到您的任務序列中。
答案3
連線是如何執行的?手動 GUI 互動還是透過腳本?如果是腳本,請在加入腳本中新增一行,以便透過 RunOnce 註冊表項執行第二個腳本。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce https://msdn.microsoft.com/en-us/library/windows/desktop/aa376977%28v=vs.85%29.aspx
---開始編輯---
喔!正確的
考慮到您對 GPO 應用程式被延遲的評論...我主要在執行同步 GPO 處理的伺服器作業系統上工作。工作站執行異步操作。嘗試這個來獲得異步:
在您的建置流程/映像中嘗試停用“快速登入最佳化”
https://technet.microsoft.com/en-us/magazine/gg486839.aspx
電腦設定\管理範本\系統\登入
在電腦啟動和登入時始終等待網路 = 已啟用
建立 GPO 啟動腳本 GPO:
電腦設定/原則/Windows 設定/腳本/啟動
在您定義的腳本內部,使用以下程式碼:
$built = gwmi Win32_OperatingSystem | foreach {[System.Management.ManagementDateTimeconverter]::ToDateTime($_.InstallDate)}
if ($built -gt (get-date).addHours(-4)) {
"do something"
}
答案4
我曾經在學校工作過。
我們自動化了加入和腳本編寫過程(擁有一個完美的映像來部署,可以持續多年,也許是烏托邦)。所以我們使用WDS/MDT來部署。
我們填寫了 .xml 應答文件,因此部署的多播映像會加入 OU(組織單位)安裝,並應用 GPO 進行最終腳本編寫並移出 OU 安裝。
這樣我們只需要用正確的名稱重新命名工作站,並將其放置在正確的 OU 中。