Windows Server Core 管理与 PowerShell 笔记(零)———— 与 Windows Server 的初次相遇

2019-03-31 244 Words Web Windows Linux

Windows Server Core 管理与 PowerShell 笔记(零)———— 与 Windows Server 的初次相遇

对于一直使用 Linux 作为服务器操作系统的我,一直对 Windows Server 作为服务器的表现如何非常好奇。最近我读了关于 Windows Server 管理的书,也尝试迁移到 Windows Server 2019。这个系统给了我一个不同于 Linux 的全新体验。尽管使用时间并不长,也确实有一点点自己的感悟。正好借此写一点文字,尝试阐述一下我浅显的看法。

一切皆文件 or 一切皆对象

Linux 的哲学之一,就在于其系统的抽象(包括硬件、软件、进程甚至内存)都被抽象成为一个文件。一切配置都是在文本文件中进行。而 Windows 则截然不同,其大多抽象称为对象:系统的进程是一个个对象、窗口和句柄是一个个对象,注册表中的配置是一个个对象,用户是一个个对象。作为 Windows Server 的核心功能活动目录(AD)来说,也是用管理多种对象的方式实现域控这一个具体的问题。

其实从命令行的方式,就能够非常明显的认识到这一思想上的不同。 Linux 的命令行都是基于文本的,也正是这个原因, grep,awk,sed 这些文本命令会被大量的穿插于 shell 命令行之中。而 Windows 的 PowerShell 命令输入输出的,是一个个对象。举个简单的例子,终止所有进程名以 p 开头的进程。这个例子摘抄于网络,但是很能说明问题。Linux 下是这么写的:

ps -e | grep "^p" | awk '{ print $1 }' | xargs kill

在这个过程之中,我们需要使用 grep 来过滤以p开头的进程,用 awk 选取处进程的名字,最后送入 xargs 进行删除。再来看看 Windows 下是如何实现的:

get-process p* | stop-process

通过 get-process 命令获取了所有以 p 开头的进程的 “对象” 而后送入 stop-process 结束这些对象。PowerShell 的管道流输入输出的,其实是一个个对象,或者对象的数组。但是打印到显示器上的时候,其实是默认调用了类似 Python 重点 __str__ 命令,从而将对象自身输出成字符流,打印在显示器上。这就解释了为什么 Powershell 能够调用 C# 对象,或者能够直接操作 Excel 的原因。

整合和分散

从功能上来说,Windows Server 能够用于各种用途,比如 DNS 服务器、文件服务器、DHCP 服务器、WEB 服务器、邮件服务器,也可以配置成为路由、nat、防火墙等。从功能上来说,其实是基本完备的。

在 Linux 上,你会使用 Nginx 或者 Apache 作为 Web 服务器,bind 作为 DNS 服务器软件 … 这些软件大多来自各种开源项目,你通过编译或者软件包管理器的方式进行安装。在 Windows Server 上,这些服务大多由微软提供的。在 Windows Server,这些被叫做 “Windows 角色与功能”,可以通过服务器管理器或者 Install-WindowsFeature 命令来新增服务器的角色。由下面这些常用的角色:

  1. IIS http 和 ftp 服务器。
  2. DNS 服务
  3. DHCP 服务
  4. SAMBA 文件服务
  5. 路由服务
  6. EXCHANGE 邮件服务
  7. 活动目录(域控)

在 Windows Server 2008 R2 上,加入了 hypre-v 服务,这是一个自带的虚拟机。此外,在 Windows Server 2019 中加入了 Containers 容器服务。你通常会选择使用这些微软官方的服务,而不是下载 Nginx 来使用。

在这几日的使用时,我发现这些服务不难使用。这些服务都有自己的GUI管理器,你可以很容易的新增一些条目,或者删去一些条目。

关于 GUI 和 CLI

Linux 绝大部分服务器都只有终端的,而 Windows 在安装时候,有桌面体验(GUI)和Windows Server Core(没有完整图形化界面)两种选项,后者启动后只会启动一个 CMD 命令控制器,而其他绝大部分组建都没有。即便如此,Windows 大部分服务器都是会安装桌面体验版本的。

在 2019 中,Windows 提供了 Windows Server Nano 版本,其比Windows Server Core 更加精简,只有几十 MB 的大小,不带交互界面。只能在外部通过 Powershell 或者 CMD 远程连接控制。这个版本主要是用于 Windows 容器之中。

活动目录和访问控制

活动目录(AD)在我看来是一个非常核心的功能,能够在网络内方便的进行中心化的权限控制,加入一个域,意味着你可以使用域账户来登陆其中的电脑,可以方便的控制服务器集群的行为(比如容灾、迁移),可以很方便的同步安装或者共享文件。你甚至可以在一台机器上,为另一台机器安装web服务。此时,域就成为了安全的边界,统一的对外防御策略以及统一的对内权限控制。

Windows 在域内的权限控制,主要是域控制器的账户访问控制,权限控制还算比较灵活。对外则是由 Windows 防火墙进行配置。防火墙控制的对象,包括应用程序、端口、服务等,这一点类似与 Firewalls 较为相似。当你需要配置防火墙时,你会发现一张巨大的表格,每一项都是对一个上述对象的控制策略,包括端口、IP等等。其每一个简单的说明可能让你并不知道其具体的功能呢,因此如果不熟悉,可能真的会难以下手。

关于容器

容器化和微服务已经越来越成为了未来运维发展方向。RedHat 的 EPEL 8.0 beta 加入了大量对于容器的支持(Podman等),Windows Server 也不例外:Windows Server 2019 开始提供了容器的功能,原生的 Windows 容器,以及通过 hypre-v 提供的 Linux 容器,这意味着你可以使用统一的 docker 前端来同时管理异构等 Windows 和 Linux 容器。

总结

在我来看,Windows Server 上手配置其实是比 Linux 简单很多的,这意味着你不需要了解服务器的细节,就能够迅速搭建自己的服务器。这在非互联网行业以及广大的政企学校制造业是非常方便的。但是如果你的需求越来越复杂,你可能就会发现 Linux 的美妙。因此对于绝大部分需求,包括搭建个人服务器、中小型企业的内部网络,这些需求对于 Windows Server 来说是完全可以胜任的,而且简单快捷。

对我来说,可能会继续尝试使用 Windows Server 作为服务器以及日常桌面使用(目前已经有一个基于 Windows Server 2019 的 CTF WEB 镜像,非常好用,该有的都有,该没有的一个都没有!!)。