相信有部分同学们会有这样的体验,在公有云上购买了Windows Server Version 1709数据中心版的虚拟机,通过远程连接进去之后,里面全是黑乎乎的一个命令行,其它啥也没有。是不是中毒了?系统坏了???这,一脸懵懂啊。
首先,请不要惊慌,系统是正常的。
什么是 Windows Server, version 1709?
Windows Server, version 1709 运行在服务器核心(Server Core)模式下。这意味着没有图形用户界面。为啥要这样做?根据微软的说法:它可以提供强大的优势,如硬件要求较低、攻击面更小并且减小了更新需求(减小了更新需求,这一点我无法认同,其他的还可以接受)。而且在这一版本里,微软没有提供图形界面到 Server Core的转换。可能是在Windows Server 2012/R2里,图形界面到Server Core的转换经常会出错,在2016里就简单粗暴一点,一旦安装,禁止转换。到了1709,直接就没有图形界面了。
Server Core和普通的带GUI图形界面的Windows Server 的主要区别如下:
- 资源管理器没有了。我们熟悉的Windows Explorer,无法出现在Server Core里。
- 所有依赖MMC的控制台界面没有了。也就是说运行*.msc将不会工作。例如:我们无法通过运行devmgmt.msc打开设备管理器了。
- 除了区域和语言及时间,其他的控制面板选项也没有了。
- 比较"著名"的IE也没有了。
Windows 管理工具简介
可能是为了像Linux看齐吧,Windows Server Version 1709更像Linux风格。很多习惯了Windows操作界面的人(用Windows 不用图形界面,生活将毫无意义:), 对Server core的使用无从下手。本节会提供几个Windwows 管理大杀器:PowerShell和 Project Honolulu等并对此作简单介绍。
PowerShell
幸亏有了PowerShell, 让 Windows 从传统的DOS命令行和批处理中解放了生产力。PowerShell 之父 Jeffrey Snover,在加入微软之前是搞Linux的。所以,我们可以在PowerShell里随处看到Linux Shell的影子如ls, wget, curl 等。但PowerShell绝对不是shell的简单升级。PowerShell 依赖.NET Framework实现了强大的面向对象的脚本。随着.NET FrameWork的开源和跨平台,PowerShell Core在Linux上也已经正式推出。
微软命名从来都是很低调的,但PowerShell命名直接就带了一个Power,可见此功能的强大。Jeffrey 在发明了PowerShell这后,直接就晋升为微软的Distinguished Engineer并且主导了Windows Server 2012的架构设计(跑远了,回来)。
在Windows Server Version 1709里打开PowerShell很简单,直接在命令行里输入 PowerShell
(大小写不敏感)就可以打开PowerShell进行操作了。
PowerShell还可以像SSH那样远程管理Windows 机器。以下示例在工作组的环境下如何配置PowerShell远程,假定被管理的机器IP是 172.16.158.183。
- 在被管理的机器上,运行以下PowerShell命令:
Enable-PSRemoting -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any
- 如果安全组有限制, 请开放对此机器入方向的5985(HTTP)和5986(HTTPS)端口。
- 在客户端机器上(需要远程连接被管理的机器上),运行以下命令以接受被管理的机器是受信任的。如果想管理任何机器,替换 172.16.158.183 为 *。
Set-Item WSMan:localhost\client\trustedhosts -value 172.16.158.183 -Force
否则执行下一步Enter-PsSession
可能报以下错误:
Enter-PSSession : 连接到远程服务器 172.16.158.183 失败,并显示以下错误消息: WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos 不同,或者客户端计算机未加入到域中, 则必须使用
HTTPS 传输或者必须将目标计算机添加到 TrustedHosts 配置设置。 使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 通过运行以下命令可获得有关此内容的更多信息: winrm help config。 有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
所在位置 行:1 字符: 1
Enter-PSSession '172.16.158.183' -Credential:'administrator'
CategoryInfo : InvalidArgument: (172.16.158.183:String) [Enter-PSSession],PSRemotingTransportException
FullyQualifiedErrorId : CreateRemoteRunspaceFailed
- 这样,在客户端机器上通过以下PowerShell命令就可以远程"SSH"到被管理的机器上了。(该输入密码还是要输入密码)
Enter-PsSession –ComputerName 172.16.158.183
Microsoft Project Honolulu
微软在1709发布时同时也宣布了一个叫火奴鲁鲁的项目。火奴鲁鲁是美国夏威夷州首府和港口城市。华人称之为檀香山(又跑远了)。火奴鲁鲁项目是一个基于浏览器的图形管理工具。他是在Server Core里替代Server Manager 和MMC的管理工具。火奴鲁鲁可以从以下网站下载:
https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-honolulu
火奴鲁鲁管理配置方法:
- 在被管理的Server 1709机器上,运行以下PowerShell命令:
Enable-PSRemoting -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any
- 如果安全组有限制, 请开放对此机器入方向的5985(HTTP)和5986(HTTPS)端口。
(第3步和第4步只需要做一步就可以了。)下载并安装火奴鲁鲁工具并安装在被管理的Server 1709机器上。
- 首先介绍在Server 1709机器上安装。笔者使用了以下PowerShell命令在被管理的机器上下载了这个msi工具。
wget -Uri http://download.microsoft.com/download/E/8/A/E8A26016-25A4-49EE-8200-E4BCBF292C4A/HonoluluTechnicalPreview1802.msi -UseBasicParsing -OutFile c:\HonoluluTechnicalPreview1802.msi
- 下载完后用以下命令行执行安装。命令是立即返回的。
msiexec /i c:\HonoluluTechnicalPreview1802.msi /qn /L*v log.txt SME_PORT=443 SSL_CERTIFICATE_OPTION=generate
- 要验证是否安装成功,可以使用PowerShell命令
cat log.txt
查看安装结果。如果有以下字样,表明安装成功。
MSI (s) (14:44) [09:48:37:885]: Product: Project 'Honolulu'(技术预览版) -- Installation completed successfully.
MSI (s) (14:44) [09:48:37:885]: Windows Installer 已安装产品。产品名称: Project 'Honolulu'(技术预览版)。产品版本: 1.1.10326.0。产品语言: 1033。制造商: Microsoft Corporation。安装成功或错误状态: 0。(第3步和第4步只需要做一步就可以了。)此工具也可以安装在任何一个作为PowerShell远程的客户端机器上。
- 可以用浏览器下载并安装.
- 安装完成后,可以打开 https://localhost/ 然后添加我们需要管理的Server 1709的机器的地址。
- 安装完成后,可以通过任何可以访问到安装了火奴鲁鲁的机器的浏览器打开。很意外的,居然不支持IE浏览器。必须要Microsoft Edge或者Chrome。
Sconfig
这个工具在Server Core诞生的那一天就有。不过现在被隐藏了。在命令行中输入sconfig
就能出现此命令。能满足基本需要,功能不是很强大。
远程Server Manager
这个是目前主要的管理形式,不过只读功能较多,可以操作的配置很少。暗地里已经被Project Honolulu取代,因此本文不做描述。
管理 Windows Server, version 1709的常见操作FAQ
如何拷贝文件到Server 1709?
这里假定要复制的文件在客户端机器上。通过PowerShell远程和通过Project Honolulu的方法都在客户端机器和Server 1709的被管理机器已经按上面的方法进行了配置。
通过远程RDP
- 在客户端机器上,右击文件并选择复制。
- 远程mstsc 到Server 1709上。
- 在远程机器上打开notepad.依次 文件 -> 打开。在打开对话框里,选择一个盘的路径,右击粘贴。文件就复制过来了。这是我最喜欢的一种方法。
通过PowerShell远程
在客户端机器上运行以下PowerShell命令即可:
$session = New-PSSession -ComputerName 172.16.158.183
Copy-Item -ToSession $session -Path C:\1.txt -Destination c:\2.txt
C:1.txt是客户端机器的文件位置。C:2.txt是要拷贝到目标机器上的位置。
通过Project Honolulu
依次点击被管理的机器-> 文件 -> 上传。
如何从内部关闭或者重启Server 1709虚拟机?
通过远程RDP
- 远程RDP到Server 1709上。
- 在命令行里输入
sconfig
, 然后根据需要选择13 -重启,14-关机并回车就可以了。 - 或者输入以下命令行/PowerShell直接重启或者关机:
shutdown -r -t 00 ::命令行 在0秒后重启
shutdown -s -t 00 ::命令行 在0秒后关机
Stop-Computer -Force # Powershell 立即关机
Restart-Computer -Force # Powershell 立即重启
通过PowerShell远程
在客户端机器上运行以下PowerShell命令即可:
Enter-PsSession –ComputerName 172.16.158.183
Restart-Computer -Force #重启
Stop-Computer -Force #关机
通过Project Honolulu
依次点击被管理的机器-> 概述。
如何安装IIS服务?
通过远程RDP
- 远程RDP到Server 1709上。
- 在命令行里输入
PowerShell
, 然后再执行以下PowerShell命令:
Import-Module ServerManager
Add-WindowsFeature Web-Server, Web-CGI, Web-Mgmt-Console
通过PowerShell远程
在客户端机器上运行以下PowerShell命令即可:
Enter-PsSession –ComputerName 172.16.158.183
Import-Module ServerManager
Add-WindowsFeature Web-Server, Web-CGI, Web-Mgmt-Console
通过Project Honolulu
依次点击被管理的机器-> 角色和功能 -> 选择 Web服务器 并确定需要的功能。
不小心在RDP会话中关闭了命令行窗口怎么办?
如果在远程会话中不小心关闭了命令行窗口,可以通过远程桌面发送 Ctrl + Alt + Del组合键(如果使用的是mstsc,按下ctrl + Alt + End),在出现的界面选择 任务管理器 回车后出现任务管理器,依次点 文件 -> 新建任务,输入cmd就可以了。
如果需要功能直达的方法,欢迎在评论区留言,我会根据留言需求更新常见操作FAQ。
Related Links
https://docs.microsoft.com/en-us/windows-server/get-started/get-started-with-1709
https://docs.microsoft.com/en-us/windows-server/manage/honolulu/honolulu
https://docs.microsoft.com/en-us/windows-server/manage/honolulu/honolulu-manage
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_troubleshooting?view=powershell-6