本文將著重於介紹 Server Core 下的基本命令列管理指令,包括了傳統的命令以及較新的Powershell cmdlet命令,文中也將一併探討Server Core的各種遠端管理連線及設定方法。
Windows Server 2012 Server Core新增功能
Windows Server 2012 的預設安裝選項即為 Server Core,而非完整的圖形介面,此外,新版的Server Core也提供一個比以住更具靈活彈性和易於使用管理的系統,底下列出了Windows Server 2012所新增或強化的功能與能力:
- Server Core可以支援更多的伺服器角色,例如WSUS、RRAS,以及SQL 2012。
- 相較起前版Windows Server 2008 R2 的Server Core 只支援230個Powershell cmdlets ,Windows Server 2012 可支援多達2430 Powershell cmdlets,足足擴充了10倍之多,因此大幅提升了命令列的管理能力。
- 只需一個Powershell cmdlet並重新開機就可以輕易的切換Server Core與圖形化介面二者之間。
- 提供一個介於完整圖形介面與Server Core之間的最精簡介面(minimal serrver)。
- 支援功能即需(features on demand),可以將不需要的角色功能二進位檔真正從硬碟內移除以進一步節省空間,安裝功能角色時可由Windows Update或指定映像來源來重新安裝。
管理 Server Core伺服器的方法
管理Windows Server 2012 Server Core伺服器的方式不止一種,其中主要的差別在於本機管理或遠端管理、命令列指令或圖形介面工具以及防火牆的規則設定:
- 使用傳統指令和Powershell cmdlet執行本機或遠端管理
- 使用伺服器管理員遠端管理
- 使用MMC遠端管理
- 使用遠端桌面服務遠端
理想上而言,負責管理Server Core 的IT人員必需熟悉並學習各種不同的管理方式,以利在不同的時機與網路環境下選擇最佳的管理方法。
利用 sconfig.cmd 工具執行伺服器設定工作
一旦安裝了Server Core之後通常會需要執行一些基礎的設定工作以便符合網路環境和日後管理維護,而在 Windows Server 2008 R2 和 Windows Server 2012 Server Core 系統中,最簡單的方式莫過於使用伺服器設定工具 (Sconfig.cmd) ,當然您必須是 Administrators 群組的成員,才有足夠的權限執行此工具。
請在命令提示字下,直接輸入sconfig,就會看到如下圖示的設定選單畫面,sconfig工具以文字選單表的方式來支援一些基本的系統設定工作,讓您可以在不需要輸入命令指令的情況下,直接利用其選單選項來替電腦加入網域、變更電腦名稱、啟用遠端管理及遠端桌面、設定TCP/IP組態、時區與時間、啟用電腦授權、關機、重新開機等工作。
雖然sconfig可讓使用者在不需要學習指令語法的情況下執行一些基本工作,但底下仍介紹一些Server Core環境下基本設定工作的使用指令,以備日後排程或程式化管理。
變更管理員密碼 –Alt-Ctrl + Del或net user
管理員的密碼對於系統安全性而言相當重要,Windows Server 系統上預設有啟用密碼原則可避免任何帳戶採用簡易的密碼,因此為了避免管理員帳戶的密碼被輕易猜測或破解,您需要替administrator設定符合密碼原則的密碼,Server Core環境下,變更密碼的方式通常有二:
- Server Core 變更密碼的方式與圖形介面系統一樣,按Alt+Ctrl+Del鍵,並選按『變更密碼』,然後輸入舊密碼一次,再輸入二次新的複雜密碼,最後按『→』即可。
- 另一種透過傳統的命令指令net user 也可以變更密碼,輸入的格式為:
net user user_name * 或
net user user_name * /domain
變更電腦名稱 – netdom或 rename-computer cmdlet
預設安裝的 Windows電腦名稱為WIN-XXXXXXXXXXX,這個自動產生的電腦名稱既難記又無意義,因此安裝之後大多會加以修改成較有意義或容易記憶的伺服器名稱,Server Core下以命令列指令變更電腦名稱大抵上有三種不同的做法:直接利用sconfig 的第2)個選項,利用『netdom』這個傳統指令或是 rename-computer cmdlet。
一. 使用 netdom renamecomputer更改電腦名稱
利用netdom命令變更電腦名稱的語法為:
netdom renamecomputer 原始電腦名稱 /newname:新電腦名稱 /reboot /force
下圖範例示範netdom的用法,原來安裝的電腦預設的主機和NetBIOS名稱為WIN-FP99TGMBSBP,利用netdom指令變更名稱為MSSRV1後( "." 代表本機電腦),不過變更電腦名稱後需重新開機後可會生效。
二. 使用 rename-computer cmdlet 變更電腦名稱
另一個Powershell 的rename-computer cmdlet也以用以變更電腦名稱,其中-passthru可以傳回命令執行後的結果,-restart會自動重新開機。
設定TCP/IP組態 – netsh 或 New-NetIPAddress 、Set-NetIPAddress、Set-DNSClientServerAddress cmdlets
Windows 系統預設安裝時的網路組態採用動態組態的方式,所以您的網路通常需要提供DHCP服務的機制存在,才能讓機器順利取有效的IP位址及相關的組態,但伺服器電腦的IP組態大多建議採用手動固定IP組態的方式,因此假若在Server Core環境下需要手動設定靜態的IP組態,則透過sconfig的選項8)最為快捷,您也可以使用傳統命令指令 netsh或New-NetIPAddress Powershell cmdlet
一. 使用 netsh設定TCP/IP組態
netsh int ip set address指令可以用來變更IP位址、子網路遮罩和預設問閘道器,而netsh int ip set dns則可用來設定DNS伺服器,下圖範例顯示其執行結果。
二. 使用 New-NetIPAddress 和 Set-DNSClientServerAddress Powershell cmdlet
PowerShell v3 內的NetTCPIP和 NetAdapter 是二個較常用的網路相關模組,如果單純想要設定一組IP組態,則使用get-netipconfiguration來查看目前的IP組態(知道網卡的別名或索引值),再利用new-netipaddress cmdlet以索引值(-interfaceindex)或別名(-InterfaceAlias)識別網卡來設定其IP位址、子網路遮罩和預設閘道器,最後再執行set-dnsclientserveraddress以設定DNS伺服器資訊,日後若想要再度變更IP位址,則使用set-netipaddress cmdlet 執行變更即可(但此cmdlet無法變更預設閘道器),下圖示範如何透過NetTCPIP模組內的cmdlets來新增IP組態的執行結果。
若您希望改回透過DHCP協定來動態取得IP位址和組態,請輸入底下指令:
Set-NetIPInterface -InterfaceAlias "乙太網路" -Dhcp Enabled
Powershell 3 的NetAdapter模組是另一個偶而會用到的網路介面管理模組,因為某些時候系統會需要停用或重新啟用網介面或是更改介面名稱,其用法如下:
- 顯示網路介面訊息-Get-NetAdapter:下圖第二個指令顯示了網路介面驅動程式的資訊,第三個指令取得網卡硬體資訊,知道網卡使用的PCI插槽。
- 停用和啟用網路卡介面--Disable-NetAdapter和Enable-NetAdapter
- 變更網路介面名稱-rename-netadapter
將Server Core伺服器加入網域
如果您需要將一部Server Core伺服器加入Active Directory網域,則可透過下列三種方法之一:
方法一:使用sconfig
sconfig是較友善的以互動式方式引導您輸入加入網域的參數,並且在底層幫您執行netdom命令來加入網域。
方法二:netdom
netdom為傳統的指令,將電腦加入網域的語法為:
netdom join <ComputerName> /domain:<DomainName> /userd:<UserName> /passwordd:*****
如下圖範例利用 netdom join指令加入網域後再重新開機。
方法三:add-computer cmdlet
另一個powershell 的 add-computer cmdlet是一個功能性較佳的加入網域方式,因為它可以指定建立電腦帳戶的組織單位(而非新增至 Computers容區下),使用add-computer cmdlet加入網域的簡單語法格式如下:
Add-Computer [-DomainName] [-Credential ] [-OUPath ] [-PassThru] [-restart]
下圖示範了加入"lij.local"這個網域的命令。
另一方面,若日後需要將Server Core 伺服器從網域中移除,直接使用 netdom remove computername即可完成,若是Powershell 3.0則也可以使用remove-computer cmdlet。
使用者帳戶管理
在Server Core環境下若要新增並管理本機使用者或群組帳戶,則可以透過net user和net localgroup命令,下圖示範如何在Server Core下建立一帳戶並將他加入administrators 群組內以及移除使用者帳戶。
安裝/移除伺服器角色和功能
Windows Server 主要用途是用來架設各種網路伺服服務,而部署伺服服務時首先需要安裝適當的伺服角色或功能,因此需要先執行Get-WindowsFeature cmdlet以查看角色或功能的名稱以及安裝狀況(Available、Removed、Installed),然後再利用Install-WindowsFeature來進行安裝工作,您可以一次安裝一個以上的角色或功能,只要在參數列以逗號隔開即可,若安裝狀況為 "Remove",則表示目前磁碟上目前無角色或功能的二進位檔,因此必需要能夠連上網際網路利用Windows Update網站來安裝或利用dism /mount-wim來掛接安裝映像再於install-windows-Feature中以-source選項來指出安裝來源才能順利安裝。
相反的,您也可以利用Uninstall-WindowsFeature來移除不再支援的角色與功能,不論是Install-WindowsFeature或Uninstall-WindowsFeature cmdlet均可以附加上 -WhatIf 參數可以顯示執行安裝或移除時會影響到那些元件一併被安裝或刪除,但安裝或移除動作並不會真正被執行。
另一項與前版不同而值得留意的不同點是:前版的伺服器角色或功能被移除(或正確的講法是停用)時,二進位檔案仍然會存在硬碟中而佔用空間,如此的設計可方便下回安裝時無需提供安裝的檔案來源,但Windows Server 2012下,您不僅可以停用已安裝的角色或功能,還可以同時將角色功能的二進位檔完全的從磁碟上刪除 (disabled with payload removed",不過日後如果要再度安裝時則需額外指定安裝的來源。因此,如果您需完整的移除角色與功能則需額外於Uninstall-WindowsFeature 附加上 -Remove選項。
下圖範例說明了如何安裝DHCP角色,可由get-windowsfeature得知目前並未安裝DHCP角色,但安裝所需的二進位檔在本機磁碟上(Available),因此安裝時無需網際網路連線或指定安裝來源而可以直接快速安裝。
下圖則是利用uninstall-windowsfeature移除DHCP並加上-remove選項以一併刪除二進位檔以節省空間。
管理Windows服務
Server Core伺服器環境下經常需要啟動服務、停止服務並重新啟動服務,Windows Server 2012 Server Core 除了可以利用傳統的sc命令來管理服務,還新增了 get-service、stop-service、start-service、restart-service、set-service等cmdlet來管理各種服務的動作。下圖範例示範了如何檢視服務狀態、啟動、停止或重新啟動服務並且透過set-service設定啟動類型。
Server Core 中文輸入設定
Windows Server 2012 Server Core雖然保留了『地區』(intl.cpl)圖形介面設定,但卻取消了『語言』偏好設定,因此並沒有圖形介面工具可以設定中文語言輸入法,您必需透過Powershell cmdlet和直接編輯登錄資料庫的方式來變更中文輸入法相關的設定,Server Core的預設語言輸入有幾點並不適合作者本身的使用習性:
- Server Core預設安裝並不會在右下型顯示語言列,以致有時候無法了解目前的輸入狀態是中文輸入或英文輸入模式,是全形或半形,是否關閉輸入法 (Ctrl+Space)而導入無法輸入或輸入錯誤,因此吾人希望在螢幕右下角可以出現語言狀態列以方便了解目前的中英文輸入狀況。
- 預設輸入模式為『微軟新注音』輸入法,每次要輸入命令時均需要先按『Shift』鍵以轉變為英文輸入後才能正確的敲入英文命令,著實不方便,因此必需將預設的輸入設定為『英數模式』。
- 另一項問題是筆者使用中文注音輸入法時,習慣使用倚天注音輸入的鍵盤而非標準注音鍵盤,所以這項偏好性設定也得更改。
解決上述三個中文輸入的問題,如下圖所示,首先利用 "set-winlanguagebaroption –uselegacylanguagebar" powershell命令即可立即啟用語言列的顯示,至於設定預設輸入為英數模式和變更為倚天注音輸入鍵盤這二項功能需直接使用登錄編輯器(regedit),進入下列途徑的機碼:
HKEY_CURRENT_USER\Software\Microsoft\IME\15.0\IMETC
並更改底下二個值即可完成。
Default Input Mode = 0x00000001
Keyboard Layout Setting.New Phonetic = 0x00020011
遠端管理Server Core伺服器
大部份情況下,IT人員執行各項Server Core管堙工作並不必然均要輸入冗長又不易記憶的文字列指令,您只需要透過遠端管理方式即可同時使用命令列指令和圖形介面管理工具來管理維護Server Core伺服器,如本文前面所提及的遠端管理Server Core伺服器的方式不外乎使用伺服器管理員、MMC管理工具、遠端桌面和Powershell四種,一般而言,伺服器管理員、MMC管理工具為偏好使用友善圖形介面工具時的首選工具,PowerShell 則可提供相當彈性的設定多機相同組態、程式化及排程化管理的優點,至於遠端桌面(Remote Desktop)一向是許多Windows管理人員最普遍使用的管理方式,但對於沒有安裝圖形化介面的Server Core伺服器而言,利用遠端桌面連線進行遠端管理時,便有如本機登入Server Core一般,仍只能在文字的命令提示字元下輸入指令管理,只不過所使用的RDP TCP 3389連接埠對許多企業組織的防火牆而言,無需額外或僅需簡單設定即可,即便由網際網路連入時,其NAT的連接埠轉送規則亦容易處理。
不過要能夠成功並順利的使用各種遠端管理Server Core伺服器的工具和方式,您需要留意底下的需求條件:
- Server Core伺服器需要先啟用各種需要的遠端管理功能。(sconfig)
- 需要執行遠端管理的用戶端電腦需先安裝『Windows 8 的遠端伺服器管理工具(RSAT for Windows 8) 』。
- 若二部電腦並非網域成員,則無法使用Kerberos驗證,而需採用HTTPS協定或者將Server Core伺服器加入TrustedHost清單 (Set-Item cmdlet)
- Server Core 伺服器上可能還需要針對所想使用的管理工具,特別是MMC工具來放行必要的連線管理流量。(enable-netfirewallrule cmdlet)
檢查或啟用Server Core伺服器遠端管理功能
Windows Server 2012安裝時,不論是安裝成完整圖形介面系統或Server Core,內定上均已啟用遠端管理功能,您可以利用sconfig指令檢查或確認是否啟用遠端管理。若先前有變更停用此項遠端管理功能,也可以使用sconfig命令以及"Enable-PSRemoting -force "、"Configure-SMRemoting –enable" powershell cmdlet來啟用winRM和伺服器管理員遠端管理功能,
設定適當的驗證方法
Windows遠端管理時可使用Kerberos和交式驗證(Negotiate authentication )二種方法,一般而言,若二部電腦同屬於Active Directory 網域電腦,則預設上採用kerberos驗證連線並不會有太大問題,但如果二部電腦並非隸屬於Active Directory樹系下網域的電腦,或更明確的說,執行遠端管理的電腦所在的網域並非Server Core伺服器網域的被信任網域,則將無法採用Kerberos驗證方法,而須改用交涉式驗證,而採用交涉式驗證時,需要在執行伺服器管理員的電腦上,使用set-item 命令將伺服器名稱新增到信任主機(TrustedHosts) 清單或者使用HTTPS傳輸協定(需要合格的伺服器憑證),因為這是 NTLM 驗證的需求,下圖示範如何利用get-item來顯示目前的信任主機清單內容:
Get-item wsman:\localhost\Client\TrustedHosts
然後再執行 set-item將Server Core伺服器加入現有的信任主機清單中
Set-Item wsman:\localhost\Client\TrustedHosts computername -Concatenate –Force
其次,在工作群組的網路環境下,如果要遠端管理的伺服器不少,且每部伺服器驗證的帳戶密碼不同,則建議在用戶端電上使用cmdkey命令將每部電腦的認證資訊儲存起來以方便日後連線時自動使用正確的帳戶密碼來連線驗證。cmdkey新增存放伺服器認證資訊的令如下:
cmdkey /add:<ServerName> /user:<UserName> /pass:<password>
下圖示範如何利用cmdkey儲存連線至Server Core的帳戶密碼。
設定防火牆規則以放行遠端管理連線的流量
雖然在Server Core上啟用了遠端管理功能之後,會自動在防火牆放行了TCP 5985連接埠的Windows 遠端管理 (透過 WS-Management 執行) 的輸入規則,遠端Powershell可以順利執行而且『伺服器管理員』也可以順利連線,但如果您還想要利用各種不同嵌入式管理單元的MMC工具來進行管理工作,則問題恐怕就會變的較為複雜,因為不同的MMC工具可能需要放行的額外流量以及處理額外的服務,某些工具(如Hyper-V管理員、磁碟管理員)執行時還會利用DCOM返回呼叫連線的用戶端電腦,這時恐怕還需要特地在用戶端電腦上設定允許匿名存取DCOM後才不會發生錯誤,舉最常使用的『電腦管理』工具為例,『電腦管理』工具是許多人再熟悉的Windows MMC管理工具,裡面內含數個嵌入式管理單元,可用來執行Windows多項基本的管理工作,包括了工作排程器、事件檢視器、共用資料夾、本機使用者和群組、效能與磁碟管理員、服務,因此若您希望能夠利用『電腦管理』工具來遠端管理Server Core伺服器,而且也已經如上段所述選擇並設定好適當的驗證方式,但當在遠端電腦使用電腦管理連線至Server Core伺服器時,卻會看到如下圖所示的錯誤對話方塊而無法連線:
這是因為電腦管理工具連線時所需要的連線被防火牆給封鎖了,因此您還需要利用netsh advfirewall firewall 命令或enable-netfirewallrule cmdlet來啟用"Windows 遠端管理" 和"遠端事件記錄檔管理"這二個預設的規則群組,指令如下:
netsh advfirewall firewall set rule group="Windows 遠端管理" new enable=yes
netsh advfirewall firewall set rule group="遠端事件記錄檔管理" new enable=yes 或
Enable-NetFirewallRule -DisplayGroup "Windows 遠端管理"
Enable-NetFirewallRule -DisplayGroup "遠端事件記錄檔管理"
一旦啟用了適當的防火牆規則群組後,您就可以透過『電腦管理』工具遠端連線至Server Core伺服器執行各項管理工作,但當您企圖使用磁碟機管理員和裝置管理員時卻又會出現如下圖的錯誤訊息,因此若要使用這二個嵌入式管理單元來執行Server Core的遠端管理磁碟系統和裝置,還需要執行一些額外設定工作。
『磁碟管理員』和『裝置管理員』的遠端管理問題
磁碟管理員和裝置管理員的遠端管理需要額外的設定動作,分別說明如下:
設定如何使用『磁碟機管理員』工具執行遠端管理:
|
至於如何使用『裝置管理員』來遠端管理Server Core伺服器的裝置,倒是有些奇怪,先前的Windows Server 2008 R2伺服器只需要啟用啟用『隨插即用』(PlugPlay)和『遠端登錄』(RemoteRegistry)二項服務並且透過(本機)群組原則編輯器啟用Server Core伺服器上的『電腦設定↘系統管理範本↘糸統↘安裝裝置↘允許遠端存取隨插即用介面』這項原則設定即可讓一部Windows 7電腦以唯讀的方式來遠端執行裝置管理員,但目前新版的Windows 8和Windows Server 2012 已經移除了遠端存取隨插即用的RPC介面,所以似乎除了使用Powershell cmdlet來替代,似乎尚未有其它解決方法。
伺服器管理員遠端管理 Server Core
一旦啟用了Server Core伺服器的遠端管理功能,也設定好驗證組態與資訊(特別是工作群組環境),並且放行了正確的防火牆流量後,最具友善及功能性的遠端管理Server Core伺服器應屬『伺服器管理員』工具,如下圖所示,在一部已安裝RSAT的Windows 8電腦啟動了『伺服器管理員』工具,再由『所有伺服器』的右鍵功能表新增伺服器,於『新增伺服器』對話方塊中選擇或輸入伺服器,如果是Active Directory網域環境下,請使用『Active Directory』標籤設定頁來選取,否則如本例為工作群組網路環境下直接輸入IP位址或電腦名稱加入即可,一旦成功加入Server Core伺服器成為管理的電腦之後,就可以利用伺服器的右鍵功能表,選取管理工具和工作 ,由下圖可看到您可以由功能表中啟動『電腦管理』、遠端Powershell工作階段,遠端桌面連線等遠端管理功能,若新增伺服器失敗,請仔細檢查前述說明的條件是否設定正確,包括是否啟用遠端管堙功能、是否設定適當的防火牆規則、是否新增主機信任清單 (非網域模式下)等。
Powershell 遠端管理
Powershell提供了彈性的程式化、排程、管理大量伺服器組態的能力,而利用Powershell進行遠端管理雖然有數種不同的做法,不過前述的啟用選遠端管理功能,設定信任主機清單(若處於非信任網域環境或工作群組下)、放行相關的防火牆規則等基本工作必須正確完成設定,而最作者建議採用的做法是由用戶端利用enter-pssession cmdlets向Server Core伺服器建立Powershell的連線工作階段,一旦建立成功後即可輸入任何Powershell cmdlet來執行遠端管理工作,直到以exit結束工作階段。下圖示範並說明了此種用法。
假若您只要在遠端機器執行一、二個命令,而非要執行持續、複雜或一連串的管理工作,則使用 Invoke-Command即可,Invoke-command是個較複雜的Powershell cmdlet,較為要的選項為:
- ComputerName : 用以指定建立遠端連線的電腦 (可以指定多部遠端電腦,需以逗號隔開)。
- ScriptBlock:於括弧{}內輸入要執行的命令內容
- FilePath:可儲存Powershell指令於檔案中,並於多部電腦上執行
下列範例示範了如何利用Invoke-Command搭配 –computername選項和scriptblock在遠端電腦server2012執行顯示最新五個系統記錄的內容。
另外,Powershell 3。0已有越來越多的cmdlet均可以支援 –computername選項以直接執行遠端命令。
遠端桌面管理
如果您希望使用遠端桌面連線在管理Server Core伺服器,則您需要先於Server Core伺服器上啟用遠端桌面管理連線功能:
- 請在Server Core 伺服器上執行下列命令以啟用遠端桌面管理連線功能:
cscript C:\Windows\System32\Scregedit.wsf /ar 0 - 如果您在較舊版 Windows 機器或利用非微軟的連線軟體來執行遠端桌面服務,則須要進一步關閉在 Windows Server 2012 中預設上所採用的較高安全性層級,請執行下列命令以便允許不支援網路層級驗證的遠端電腦可以使用遠端桌面連線:
script C:\Windows\System32\Scregedit.wsf /cs 0
完成遠端桌面啟用設定後,可即在任何Windows電腦利用遠端桌面連線程式(mstsc)建立與Server Core伺服器的連線,最後利用登出(logoff)結束遠端桌面連線,如下圖所示:
結語
Windows Server Core伺服器提供了較安全、低資源耗用量而且相對高效能的Windows伺服器平台,而Windows Server 2012 的Server Core比較起先前的版本,已經大幅強化了其使用彈性和可管理性,讓它在企業組織架設Windows伺服器時變成為一個可獲得IT人員考量與青睞的安裝部署選項,因為Server Core、最精簡伺服器(minimal server) 和完整圖形介面可藉由簡單的安裝/移除圖形化功能的步驟即可切換,不再像前版一般於安裝後即無法變更模式的僵硬性設計,再者,提供了超過二千個cmdlet可供管理使用、透過安裝RSAT執行遠端連線管理時可使用圖形化的伺服器管理員和MMC工具來進行Server Core伺服器管理工作,讓管理Server Core伺服器的管理員不必然一定要重新學習所有複雜的指令,不過由於基本的命令列指令與cmdlet仍有其必要性,因此本文仍然花費大部份篇幅在說明IT人員管理Server Core伺服器所必要學習的基本指令以及遠端管理方式,最後將這些最基本的Server Core管理指令整理如下表,以方便各位學習與查詢。
Server Core 基礎管理工作 | 命令 |
顯示作業系統設定資訊 | systeminfo |
更改電腦名稱 |
|
設定密碼 |
|
設定TCP/IP組態 |
|
將Server Core伺服器加入網域 |
|
管理本機使用者帳戶 | net user 和 net localgroup |
安裝/移除角色或功能 | install-windowsfeature /uninstall-windowsfeature (利用 get-windowsfeature查看名稱與狀況) |
服務管理 | get-service、stop-service、start-service、restart-service、get-wmiobject win32_service |
設定防火牆規則 |
|