Skip to content

Latest commit

 

History

History
357 lines (254 loc) · 15.5 KB

File metadata and controls

357 lines (254 loc) · 15.5 KB

PowerUpSQLSharp 测试环境安装手册(AutomatedLab)

基于 AutomatedLab 官方文档整理,面向 Acceptance-Tests.md 中定义的集成测试需求。

1. 可行性结论

可行。 AutomatedLab 原生支持本项目的核心测试依赖:

验收需求 AutomatedLab 支持
SQL Server 2016 / 2019 / 2022 各至少 1 实例 SQLServer2016SQLServer2019SQLServer2022 角色
域环境(DC + 域成员 SQL Server) RootDC 角色 + DomainName 参数
非域独立 Windows 主机 不指定 DomainName 的独立 VM
UDP 广播 / 子网扫描 同一虚拟网络内多 SQL 实例
弱口令 / 默认 sa 检测 部署后通过 Invoke-LabCommand 或手动配置

AutomatedLab 通过 PowerShell 脚本声明式部署 Hyper-V(本地)或 Azure(云)实验环境,与 PowerUpSQLSharp 的 Windows/.NET 4.8 运行环境完全兼容。

不适用或需额外工作的场景:

  • Sliver C2 托管验收需自行在 Client VM 上安装 Sliver,AutomatedLab 不提供此角色
  • 部分攻击链场景(链接服务器爬取、UNC 注入等)可能需额外 PostInstallation 脚本手工配置
  • 宿主机必须是 Windows 10/11 Pro/EnterpriseWindows Server(需 Hyper-V);家庭版不支持 Hyper-V

2. 架构概览

推荐实验拓扑(单域 + 多版本 SQL + 独立主机 + 测试客户端):

                    ┌─────────────────────────────────────────┐
                    │  Hyper-V 宿主机(AutomatedLab 控制端)    │
                    └─────────────────────────────────────────┘
                                        │
                    虚拟网络 192.168.100.0/24(可自动分配)
                                        │
        ┌───────────────┬───────────────┼───────────────┬───────────────┐
        │               │               │               │               │
     DC1 (RootDC)   SQL16          SQL19          SQL22         STANDALONE
   contoso.com    域成员+SQL2016   域成员+SQL2019  域成员+SQL2022   工作组 SQL
        │               │               │               │               │
        └───────────────┴───────────────┴───────────────┴───────────────┘
                                        │
                                   CLIENT1
                            (运行 PowerUpSQLSharp 对照测试)

3. 宿主机要求

依据 AutomatedLab 官方要求

项目 最低建议(本实验拓扑) 说明
操作系统 Windows 10/11 Pro+ 或 Server 2012 R2+ 推荐 en-us 语言环境
CPU 支持 Intel VT-x / AMD-V BIOS 中启用虚拟化
内存 32 GB+ DC 2G + 3×SQL 4G + 独立机 4G + 客户端 2G + 宿主机开销
磁盘 150 GB+ 可用空间(SSD) 官方明确不建议机械硬盘
PowerShell 5.1+,推荐 PowerShell 7 管理员权限
.NET 4.7.1+(Windows PowerShell)
Hyper-V 已启用 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

4. 准备 ISO 与安装介质

4.1 操作系统 ISO

将 ISO 放入 LabSources\ISOs\(安装 AutomatedLab 后创建,见第 5 节)。

至少需要:

  • Windows Server 2019 或 2022 Datacenter(Desktop Experience)— 用于 DC 与 SQL 服务器
  • Windows 10/11 Pro — 用于测试客户端(可选,也可在宿主机直接测试)

验证 ISO 可被识别:

# 将路径替换为你的 LabSources 实际位置
Get-LabAvailableOperatingSystem -Path C:\LabSources

4.2 SQL Server ISO

通过 Add-LabIsoImageDefinition 注册 SQL 安装镜像。Developer / Evaluation 版均可用于测试。

# 文件名按你实际下载的 ISO 修改
Add-LabIsoImageDefinition -Name SQLServer2016 -Path C:\LabSources\ISOs\SQLServer2016.iso
Add-LabIsoImageDefinition -Name SQLServer2019 -Path C:\LabSources\ISOs\SQLServer2019.iso
Add-LabIsoImageDefinition -Name SQLServer2022 -Path C:\LabSources\ISOs\SQLServer2022.iso

SQL Server 2017 及以上若需 Reporting Services 且宿主机离线,需额外放置
LabSources\SoftwarePackages\SQLServerReportingServices.exe(见官方 SQL 角色文档)。


5. 安装 AutomatedLab

官方提供两种方式,任选其一。

方式 A:PowerShell Gallery(推荐,支持 PowerShell 7)

管理员身份打开 PowerShell:

Install-PackageProvider Nuget -Force
Install-Module AutomatedLab -SkipPublisherCheck

# 非交互环境:跳过遥测对话框(可选)
[Environment]::SetEnvironmentVariable('AUTOMATEDLAB_TELEMETRY_OPTIN', 'false', 'Machine')
$env:AUTOMATEDLAB_TELEMETRY_OPTIN = 'false'

# 配置宿主机远程(部署必需)
Enable-LabHostRemoting -Force

# 创建 LabSources 目录结构
New-LabSourcesFolder -DriveLetter C

参考:Installation - From gallery

方式 B:MSI 安装包

  1. GitHub Releases 下载最新 MSI
  2. 运行安装程序;建议选择自定义安装,将 LabSources 放到空间充足的磁盘(模块默认在 C:\Program Files\WindowsPowerShell\Modules
  3. 确认 LabSources 目录结构完整(含 ISOsSoftwarePackagesTools 等子文件夹)

参考:Installation - From MSI

安装后检查

Get-Module AutomatedLab -ListAvailable
Test-LabHostConnected

6. 部署 PowerUpSQLSharp 测试实验环境

6.1 完整部署脚本

将以下脚本保存为 Deploy-PowerUpSQLSharpLab.ps1,根据实际 ISO 路径与版本调整后,以管理员身份在 PowerShell ISE 或 pwsh 中执行。

<#
.SYNOPSIS
    使用 AutomatedLab 部署 PowerUpSQLSharp 集成测试实验环境
.DESCRIPTION
    拓扑:1 DC + 3 域成员 SQL(2016/2019/2022)+ 1 工作组 SQL + 1 客户端
    参考:AutomatedLab 官方示例 06 SQL Server and client, domain joined.ps1
#>
[CmdletBinding()]
param(
    [string]$LabName = 'PowerUpSQLSharpLab',
    [string]$DomainName = 'contoso.com',
    [string]$InstallUser = 'Install',
    [string]$InstallPassword = '[密码已脱敏]'
)

$ErrorActionPreference = 'Stop'

# LabSources 路径(Gallery 安装默认 C:\LabSources)
$labSources = if ($labsources) { $labsources } else { 'C:\LabSources' }

Import-Module AutomatedLab

# ── 1. 实验定义 ──────────────────────────────────────────────
New-LabDefinition -Name $LabName -DefaultVirtualizationEngine HyperV

# 手动指定网段(可选;省略则由 AL 自动选择 192.168.x.0/24)
Add-LabVirtualNetworkDefinition -Name $LabName -AddressSpace 192.168.100.0/24

# ── 2. 注册 SQL ISO(按实际文件名修改 Path)──────────────────
Add-LabIsoImageDefinition -Name SQLServer2016 -Path "$labSources\ISOs\SQLServer2016.iso"
Add-LabIsoImageDefinition -Name SQLServer2019 -Path "$labSources\ISOs\SQLServer2019.iso"
Add-LabIsoImageDefinition -Name SQLServer2022 -Path "$labSources\ISOs\SQLServer2022.iso"

# 域与统一安装凭据
Add-LabDomainDefinition -Name $DomainName -AdminUser $InstallUser -AdminPassword $InstallPassword
Set-LabInstallationCredential -Username $InstallUser -Password $InstallPassword

# 域内机器默认参数
$PSDefaultParameterValues = @{
    'Add-LabMachineDefinition:Network'           = $LabName
    'Add-LabMachineDefinition:DomainName'      = $DomainName
    'Add-LabMachineDefinition:OperatingSystem' = 'Windows Server 2019 Datacenter (Desktop Experience)'
    'Add-LabMachineDefinition:Memory'          = 4GB
}

# ── 3. 虚拟机定义 ────────────────────────────────────────────

# 域控制器
Add-LabMachineDefinition -Name DC1 -Roles RootDC -Memory 2GB -OperatingSystem 'Windows Server 2019 Datacenter (Desktop Experience)'

# 域成员 SQL Server(仅引擎 + 工具,可按需加 Sample DB)
$sqlRole2016 = Get-LabMachineRoleDefinition -Role SQLServer2016 -Properties @{ Features = 'SQL,Tools' }
$sqlRole2019 = Get-LabMachineRoleDefinition -Role SQLServer2019 -Properties @{ Features = 'SQL,Tools' }
$sqlRole2022 = Get-LabMachineRoleDefinition -Role SQLServer2022 -Properties @{ Features = 'SQL,Tools' }

Add-LabMachineDefinition -Name SQL16 -Roles $sqlRole2016 -Processors 2
Add-LabMachineDefinition -Name SQL19 -Roles $sqlRole2019 -Processors 2
Add-LabMachineDefinition -Name SQL22 -Roles $sqlRole2022 -Processors 2

# 工作组独立 SQL(测试非域 graceful degradation)
$standaloneRole = Get-LabMachineRoleDefinition -Role SQLServer2019 -Properties @{ Features = 'SQL,Tools' }
Add-LabMachineDefinition -Name STANDALONE -Roles $standaloneRole -DomainName $null -Processors 2

# 域成员测试客户端
Add-LabMachineDefinition -Name CLIENT1 -OperatingSystem 'Windows 10 Pro' -Memory 2GB -Processors 2

# ── 4. 部署 ──────────────────────────────────────────────────
Install-Lab

Show-LabDeploymentSummary -Detailed

角色说明: SQLServer20xx 角色会自动创建服务账户;默认实例名为 MSSQLSERVER。更多属性见 SQL Server 角色文档

6.2 部署后配置(验收场景)

AutomatedLab 默认 sa 密码由内部生成。部署完成后,通过官方 Invoke-LabCommand 在 VM 内执行配置:

Import-Lab -Name PowerUpSQLSharpLab

# 示例:为验收用例 B1-060 配置弱口令 sa(仅测试环境)
$script = {
    Invoke-Sqlcmd -Query "ALTER LOGIN sa WITH PASSWORD = ''" -ErrorAction SilentlyContinue
    Invoke-Sqlcmd -Query "ALTER LOGIN sa ENABLE" -ErrorAction SilentlyContinue
}
Invoke-LabCommand -ComputerName SQL16 -ScriptBlock $script

# 示例:启用 xp_cmdshell(B1-070 对照项,按需)
$enableXp = {
    Invoke-Sqlcmd -Query "EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
        EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;"
}
Invoke-LabCommand -ComputerName SQL19 -ScriptBlock $enableXp

PowerUpSQLSharp.exe 复制到客户端:

Copy-LabFileItem -Path 'C:\Tools\PowerUpSQLSharp\dist\PowerUpSQLSharp.exe' -ComputerName CLIENT1 -DestinationFolderPath 'C:\Tools'

参考:Invoke-LabCommandExchanging data


7. 验收测试对照命令

在 CLIENT1 或宿主机上(需能解析 contoso.com DNS,域成员或配置 hosts 后):

# 本机实例发现(在 SQL VM 上执行)
.\PowerUpSQLSharp.exe Get-SQLInstanceLocal

# 域内实例发现(B1-020)
.\PowerUpSQLSharp.exe Get-SQLInstanceDomain

# UDP 子网扫描(B1-040)
.\PowerUpSQLSharp.exe Get-SQLInstanceScanUDP -ComputerName 192.168.100.0 -SubnetMask 255.255.255.0

# 连接测试(B1-050,实例名按 Show-LabDeploymentSummary 输出调整)
.\PowerUpSQLSharp.exe Get-SQLConnectionTest -Instance "SQL19" -Username sa -Password "<sa密码>"

# 服务器信息(B1-070)
.\PowerUpSQLSharp.exe Get-SQLServerInfo -Instance "SQL19" -Username sa -Password "<sa密码>"

获取各 VM 的 IP 与默认凭据:

Get-LabVM | Select-Object Name, IpAddress, DomainName, Roles
Get-LabCredential

8. 实验环境生命周期管理

操作 命令
查看已部署实验 Get-Lab -List
导入已关闭 ISE 后的实验 Import-Lab -Name PowerUpSQLSharpLab
创建快照 Checkpoint-LabVM -All
恢复快照 Restore-LabVMSnapshot -All
远程 PowerShell 会话 Enter-LabPSSession -ComputerName SQL19
完全删除实验 Remove-Lab

删除实验会移除 VM、虚拟交换机和差分磁盘,但保留基础镜像以加速下次部署。

参考:Getting started - Removing a Lab


9. 常见问题

现象 处理
找不到操作系统 ISO 确认 ISO 在 LabSources\ISOs\,运行 Get-LabAvailableOperatingSystem
SQL 角色部署失败 检查 Add-LabIsoImageDefinitionNameRole 版本一致
磁盘速度慢 / 超时 VmPath 指向 SSD:New-LabDefinition -VmPath D:\AutomatedLab-VMs
内存不足 减少并行 VM 或降低 -Memory;可拆成两个实验分批部署
Pester 验证提示 可选安装 Pester 5.0.1+;不影响部署,仅影响部署后验证
宿主机无法访问域 DNS 在宿主机 hosts 添加 DC IP,或使用 Enter-LabPSSession 在 CLIENT1 内测试

10. 硬件不足时的精简拓扑

若内存 < 32 GB,可分批或缩减:

方案 A — 最小域环境(约 12 GB): DC + SQL19 + CLIENT1

方案 B — 仅非域(约 6 GB): 单台 STANDALONE + SQL2019,覆盖 B1-002、B1-050 等无 AD 用例

方案 C — Azure 云实验: 在 Linux/macOS 或低配笔记本上,通过 Azure 订阅部署(需按官方 Azure 文档配置,并将 ISO 同步到云存储)。


11. 官方参考链接

主题 URL
项目主页 https://github.com/AutomatedLab/AutomatedLab
安装 https://automatedlab.org/en/latest/Wiki/Basic/install/
快速入门 https://automatedlab.org/en/latest/Wiki/Basic/gettingstarted/
创建实验 https://automatedlab.org/en/latest/Wiki/Basic/createnewlab/
网络与 IP https://automatedlab.org/en/latest/Wiki/Basic/networksandaddresses/
添加虚拟机 https://automatedlab.org/en/latest/Wiki/Basic/addmachines/
Active Directory 角色 https://automatedlab.org/en/latest/Wiki/Roles/activedirectory/
SQL Server 角色 https://automatedlab.org/en/latest/Wiki/Roles/sql/
官方 SQL 域示例脚本 https://github.com/AutomatedLab/AutomatedLab/blob/master/LabSources/SampleScripts/Introduction/06%20SQL%20Server%20and%20client%2C%20domain%20joined.ps1
示例脚本目录 https://github.com/AutomatedLab/AutomatedLab/tree/master/LabSources/SampleScripts

12. 与 PowerUpSQLSharp 验收清单映射

验收类别 本实验覆盖
B1-001 ~ B1-003 本机实例发现 SQL16/19/22、STANDALONE 各 VM
B1-010 ~ B1-011 UDP 广播/扫描 同子网多 SQL 实例
B1-020 ~ B1-021 域/非域 SQL19(域)+ STANDALONE(工作组)
B1-050 ~ B1-052 连接测试 各 SQL VM
B1-060 ~ B1-061 弱口令 部署后脚本配置
B1-070 服务器信息 各版本 SQL
Batch 4 AD 函数 DC1 + contoso.com 域

完整 108 项函数验收可能仍需手工配置链接服务器、CLR 程序集等复杂场景,可在本实验基础上通过 Invoke-LabCommand 追加 PostInstallation 脚本扩展。