从安装冻结到 PowerShell 自动化:我的 Windows Server 2019 之旅

发布: (2026年1月16日 GMT+8 01:35)
5 min read
原文: Dev.to

Source: Dev.to

(请提供您希望翻译的具体文本内容,我将为您翻译成简体中文,同时保留原始的格式、Markdown 语法以及代码块和 URL。)

引言:挑战

我最近完成了一个综合实验项目:从零部署一个功能完整的 Windows Server 2019 环境。目标不仅是安装操作系统,而是像真实的系统管理员一样,通过自动化来处理用户、组和安全文件共享。

刚开始时,我感觉自己像个新手,但到项目结束时,我已经在编写多行 PowerShell 脚本来管理基础设施。

第1阶段:设置与“冻结”

我的实验环境运行在 Oracle VirtualBox 上。安装过程让我学到了虚拟化故障排除的第一个重要教训。

最初,Windows Server 的安装在“旋转点”启动画面上不断卡死。深入检查虚拟机设置后,我意识到现代服务器操作系统需要特定的虚拟化硬件特性。

解决方案

虚拟机配置缺少关键的处理器特性。我在 VirtualBox 的处理器设置中启用了 PAE/NX,并增加了视频内存。应用这些调整后,安装顺利完成,进入了桌面体验。

第2阶段:基础配置(手动部分)

以管理员身份登录后,第一步是为服务器分配身份。

在真实网络中,服务器需要静态地址,以便始终能够被定位。我为网络适配器配置了适合实验环境的静态 IPv4 地址(10.0.2.15)。

我还将计算机的通用 Windows 名称重命名为更具意义的名称:WIN‑SERVER‑01。虽然可以使用图形界面完成此操作,但我使用 PowerShell 进行快速重命名并重启:

Rename-Computer -NewName "WIN-SERVER-01" -Restart

第 3 阶段:自动化的力量(酷炫部分)

需求是创建多个用户(Alice、Bob、Charlie),将他们分配到部门(HR、IT),并确保他们在首次登录时更改密码。手动完成这些操作需要数十次点击,于是我编写了一个 PowerShell 脚本,在几秒钟内完成全部工作。

脚本方法

我使用 ISE 编写了一个利用循环和条件语句的脚本。它会在尝试创建用户或组之前检查其是否已存在,使脚本 idempotent(安全地多次运行)。

# Automating User Creation
$users = @("Alice", "Bob", "Charlie")
foreach ($user in $users) {
    # Create the user
    New-LocalUser -Name $user -Password $securePassword -Description "Staff"

    # Force password change at next login
    $userObj = [ADSI]"WinNT://$env:COMPUTERNAME/$user,user"
    $userObj.PasswordExpired = 1
    $userObj.SetInfo()
}

用户脚本

第4阶段:权限和加固

文件共享

我创建了受限文件夹 HRDocsITDocs。使用 PowerShell 确保只有相应的组能够访问其文档,遵循最小特权原则。

安全加固

作为基本的安全措施,我禁用了内置的 Guest 账户,以防止匿名访问。PowerShell 让此操作的验证变得轻而易举。

Security Hardening

结论与经验教训

这个项目是一次关于 Windows Server 管理的绝佳速成课程。最大的收获不仅是知道 配置什么,更是知道 如何 高效地去做。

虽然 GUI 对学习有帮助,但 PowerShell 对于可扩展、可重复的系统管理至关重要。克服最初的安装障碍并看到我的脚本成功部署环境,感觉是一次巨大的成功。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...