Windows Server 2008的管理利器
一个熟练的并且有一定的技术深度的服务器管理员,他们往往会弃用友好的图形界面而选择用命令来进行服务器的管理。这样不仅能够提升工作效率,而且在命令行下可以实现许多在图形界面下无法完成的任务。对于Windows Server 2008这样的服务器操作系统来说更是如此,善用命令在很大程度上解放管理员。下面笔者向大家介绍几个在Server 2008中非常实用的命令。
1.用ServerManagerCMD命令进行服务器管理
ServerManagerCMD是服务器管理器的命令行工具,用于支持三种重要的操作:添加和删除角色、角色服务、功能,以及用于显示安装的角色、角色服务、功能。对于去具体的参数大家可以在命令行下输入“ServerManagerCMD /?”进行查看。其中-query、-install、-remove是三个最常用的参数,分别用户查询、安装和删除服务器角色、角色服务和功能。下面笔者分别演示这三个参数的用法。
(1).查询
在命令提示符窗口中输入命令“ServerManagerCMD -query”,回车后就可以查看到服务器的配置和功能,从而省去了在“服务管理器”的图形界面中来回地切换。显示结果一目了然:角色和功能会分成两组,另外已经安装的角色、角色服务、功能会以绿色显示并在该项的前面有[X]标识,没有安装的显示为白色前面标识为[ ]。如图1所示笔者的服务器安装的服务器角色有:Active Directory 域服务、DNS 服务器、Windows 部署服务,安装的功能组件有:TFTP 客户端、组策略管理器。另外,所安装的角色服务以层次结构显示在对于的角色下面。(图1)
笔者还有一个技巧和大家分享:当服务器安装了多个角色、角色服务以及功能组件,如果管理员要查看是否安装了某个对象这将比较麻烦。其实ServerManagerCMD -query支持管道命令“|”,我们可以这样来做:假如我们要查看服务器是否安装了组策略管理组件,可在命令行下输入“ServerManagerCmd.exe -query | GPMC”,回车后如果安装了此组件就会打开该工具,否则会显示错误提示(比如输入命令“ServerManagerCmd.exe -query | RSAT-TS”查看是否安装了终端服务工具,因为没有安装会输出错误)。(图2)
(2).安装
Windows Server 2008默认情况下并没有安装telnet客户端,假如我们要安装该功能组件,可在命令提示符下输入命令“ServerManagerCmd.exe -install Telnet-Client -resultPath installResult.xml”并回车。此时就开始Telnet-Client功能组件的安装,并且会实时显示安装的进度(百分比),很快安装完成。上述命令中,“Telnet-Client”是Telnet客户端的系统名称,必须用英文名称不能用中文,否则会显示“无效的角色、角色服务或功能”。当然,对于一个熟练的服务器管理员记住这些名称应该不是难事。如果你忘记了可通过上面的查询命令“ServerManagerCmd.exe -query”来查看。“-resultPath installResult.xml”参数的作用是以XML的格式将刚才的操作结果保存到installResult.xml文件中。另外,如果安装的角色需要重启计算机我们可以在后面加一个参数“-restart”,以实现安装完成后自动重启系统使刚才的安装生效。(图3)
(3).删除
要删除服务器角色、角色服务或者功能组件其操作方法和上面的类似,只是改变ServerManagerCmd.exe命令的参数即可。例如我们要同时删除“Windows 部署服务”角色和“TFTP 客户端”功能组件,可在命令提示符下输入命令“ServerManagerCMD -remove WDS TFTP-Client”并回车。然后开始删除并显示删除进度,稍等片刻即可完成删除任务。如果要删除更多的角色或者功能,只需将该角色或者功能的名称依次输入并相互之间以空格分开即可,这远比图形界面中的操作要快很多。(图4)
2、快速配置服务器组件
服务器的配置不仅仅是技术活,有的时候也是体力活。服务器管理员如何实现服务器的快速配置,以提升工作效率自我解放呢?善用命令和使用脚本这是一套立竿见影的解决方案,下面笔者列举几个实战案例。
(1).配置防火墙
防火墙配置是服务器安全部署的重要方面,也是一项比较繁琐的工作。特别对于Windows Server 2008这样的服务器平台,它的系统防火墙功能是非常强大的并且可配置项非常多。下面和大家分享几个实用的命令以及一个配置案例。
打开命令提示符输入输入命令“netsh firewall show state”然后回车可查看防火墙的状态,从显示结果中可看到防火墙各功能模块的禁用及启用情况。命令“netsh firewall set opmode disable”用来禁用系统防火墙,相反命令“netsh firewall set opmode enable”可启用防火墙。(图5)
接下来我们通过命令行进行防火墙配置,以实现允许访问文件和打印共享以及DNS查询。打开命令提示符输入命令“netsh firewall add portopening UDP 53 DNS-Server”然后回车,命令执行后服务器就能够响应客户端的DNS查询请求,并为其提供DNS服务了,很简单一个命令搞定。下面我们通过命令实现客户端可通过文件和打印共享访问服务器,分别输入并执行如下命令:“netsh firewall add portopening UDP 137 Netbios-ns”(允许客户端访问服务器UDP协议的137端口)、“netsh firewall add portopening UDP 138 Netbios-dgm”(允许访问UDP协议的138端口)、“netsh firewall add portopening TCP 139 Netbios-ssn”(允许访问TCP协议的139端口)、“netsh firewall add portopening TCP 445 Netbios-ds”(允许访问TCP协议的445端口)。命令执行完毕后,文件及打印共享所须的端口都被防火墙放行了,我们从客户端访问试试果然成功。上面的命令虽然比较多,但格式类似也是非常好记的。(图6)
(2).脚本在Server Core下的应用
Server Core是摒弃Windows Server 2008华丽功能的一个最小安装的服务器版本,Server Core的配置离不开命令行和脚本。在命令行下执行“cd cd c:windowssystem32”来到system32目录下,输入“cscript SCregEdit.wsf /di”然后回车,就会把所有常见的配置Server Core的命令全部列出,而不需要管理员自己摸索。其中,SCregEdit.wsf是Server Core特有的脚本,它有很多参数供管理员使用。输入“Cscript slmgr.vbs -dlv”可显示服务器的授权状态。假如我们要在Server Core下启用远程桌面,可首先打开命令跳转到system32路径下然后执行命令“cscript SCregEdit.wsf /Ar 0”启用远程桌面。接下来需要配置防火墙打开远程桌面使用的端口,执行命名“netsh firewall add portopening TCP 3389 Remote-Desktop”即可。脚本是Server Core中非常有用的资源,大家应该好好去挖掘和利用。(图7)
(3).其他脚本和命令行工具
在Windows Server 2008中还有一个强大的命令行工具PowerShell,它远比CMD强大对服务器系统的可操作性更多。默认情况下PowerShell功能组件并没有安装,我们可在命令行下通过
ServerManagerCmd.exe命令来安装,即运行“ServerManagerCmd.exe -install PowerShell”即可。安装完成后执行“开始”→“所有程序”→“Windows PowerShell 1.0”→“Windows PowerShell”即可运行PowerShell。运行“get-command | more”和获得所有的PowerShell命令并以分屏显示。PowerShell的命令包括两部分,非常具有可读性,管理员可同名命令名称猜到该命令的作用。比如我们要在PowerShell访问注册表,可执行“cd -path hklm:”可进入注册表HKEY_LOCAL_MACHINE主键路径下,继续执行“dir”显示HKLM主键下的各子键,执行“cd SoftwareMicrosoftWindowsCurrentVersionRun”进入系统自启动项下,执行“gp . *”将显示RUN项的属性以及下面的键值,输出结果中前面四个位RUN项的属性,据此管理员可进行进行分析启动项是否正常。其次,比如我们在PowerShell命令行下输入命令“Get-Process | Out-File -FilePath C:process.txt”及“Get-Service | Out-File -FilePath C:srver.txt”可将服务器当前的进程及其服务状态输出到文件中,在以后的服务器维护中可作为对比。其实,PowerShell的个完全可替代CMD的工具,通过它几乎可以完成所有的系统操作,深入学习PowerShell对于提高管理效率确实非常有用。(图8)
另外,WinRM也是非常有用的管理工具。使用WinRM进行远程服务器管理,可以减少并不安全而且繁琐的RPC连接,只需要使用HTTP或者HTTPS就可以了,这对于跨越防火墙管理的场景非常有用。首先在命令行下执行“WinRM QuickConfig”,然后输入“y”可启用WinRM远程管理。接着继续执行命令“WINRM Enum Winrm/Config/Listener”可以看到服务器上的侦听配置情况,如图9所示http的80端口处于监听状态,这样可以通过客户端的浏览器来管理服务器了。WMI也是管理员可用的服务器管理工具,在实战中编写WMI脚本来代理管理员完成一些需要管理员付出非常多的精力的重复而大量的操作。(图9)
3、获取服务器详细信息
对于服务器来说,管理和监控是并举的。服务器管理者需要随时了解服务器的软硬件情况及其运行状态,在Windows Server 2008中不需要借助第三方工具在命令行下就可实现。
在命令行下执行systeminfo.exe命令,可以看到关于操作系统及其服务器硬件的详细信息,当然systeminfo.exe命令并部署Windows Server 2008所特有的。如果我们要知道服务器中安装的所有msi规范的应用程序,可首先打开命令提示符然后输入命令wmic进入其命令模式,然后执行product命令就会显示你要的结果。如果要卸载安装的某个msi的应用程序,可调用product的uninstall方法,命令格式为WMIC product where name='' call uninstall。当然大家所知的tasklist、net share、net server等都是我们获取服务器信息的命令,其实我们可借用PowerShell中的相关命令获取更加详细的服务器信息。在PowerShell中几乎所有以“get”为前缀的命令都与获取服务器信息相关,比如“get-date”可获取当前系统日期,“Get-EventLog”可获取服务器日志信息,“Get-PSDrive”获取系统分区信息等等。(图10)
总结:服务器管理质量固然重要,但效率也同等重要,它们之间并不矛盾而是互相促进的。作为服务器管理者更多地通过命令来进行管理无疑会极大地提升管理的效率,对于Windows Server 2008这样的服务器平台更是如此。上面仅仅是笔者运用命令行管理服务器的一些经验,更多的技巧需要我们大家在实践中摸索和提高,希望本文对大家有所帮助。