- 维护系统管理任务
- 管理 AD 域服务
- 管理组和组成员身份
- 管理组
- 创建新组
- 管理组成员身份
- 管理计算机帐户
- 新建计算机帐户
- 修复计算机账户的信任关系
- 账户与设备管理cmdlet的区别
- 管理组织单位和 AD 对象
- 什么是组织单位 (OU)?
- OU 的 cmdlet
- 创建新 OU
- AD 对象 cmdlet
- 创建新的 AD 对象
- 实际案例
- 批量创建 OU
- 批量把用户放入 OU
- 恢复误删的用户
- 管理组和组成员身份
- 设备的网络服务设置
- 管理 IP 地址
- 创建新的 IP 地址设置
- 实际案例
- 管理 IP 路由
- 创建 IP 路由表条目
- 实际案例
- 管理 DNS 客户端
- 实际案例
- 防火墙设置
- 实际案例
- 管理 IP 地址
- 管理 Windows Server 设置
- 自动执行管理任务
- 什么是 GPO?
- 常见任务
- 实际案例
- 管理服务器角色和服务
- 实际案例
- 管理 Hyper-V 虚拟机
- 实际案例
- 管理 IIS
- 实际案例
- 自动执行管理任务
- 管理本地计算机的设置
- 运行管理 cmdlet
- 管理权限
- 检索访问权限
- 更新文件和文件夹访问权限
- 将安全描述符复制到新对象
- 管理 AD 域服务
维护系统管理任务
管理 AD 域服务
管理组和组成员身份
Active Directory 组管理与用户管理密切相关。 可使用 Windows PowerShell Active Directory 模块的 cmdlet 来创建和删除组并修改组属性。 还可使用这些 cmdlet 来更改组成员身份。
管理组
下表列出了用于管理组的一些常见 cmdlet:
Cmdlet | 说明 |
---|---|
New-ADGroup | 创建新组 |
Set-ADGroup | 修改组的属性 |
Get-ADGroup | 显示组的属性 |
Remove-ADGroup | 删除组 |
Add-ADGroupMember | 向组添加成员 |
Get-ADGroupMember | 显示组成员 |
Remove-ADGroupMember | 从组中移除成员 |
Add-ADPrincipalGroupMembership | 向对象添加组成员身份 |
Get-ADPrincipalGroupMembership | 显示对象的组成员身份 |
Remove-ADPrincipalGroupMembership | 从对象中移除组成员身份 |
创建新组
可使用 New-ADGroup cmdlet 来创建组
使用 New-ADGroup cmdlet 创建组时,除了组名称之外,还必须使用 -GroupScope 参数,此参数是唯一必需的参数
下表列出了 New‑ADGroup 的常用参数:
参数 | 说明 |
---|---|
‑Name | 定义组名称 |
‑GroupScope | 将组的范围定义为 DomainLocal、Global 或 Universal;必须提供此参数 |
‑DisplayName | 定义对象的轻型目录访问协议 (LDAP) 显示名称 |
‑GroupCategory | 定义组是安全组还是通讯组;如果未指定,则会创建安全组 |
‑ManagedBy | 定义可以管理组的用户或组 |
‑Path | 定义会在其中创建组的 OU 或容器 |
‑SamAccountName | 定义与旧操作系统向后兼容的名称 |
例如,若要创建名为 FileServerAdmins 的新组,请在控制台中输入以下命令,然后按 Enter 键: |
New-ADGroup -Name FileServerAdmins -GroupScope Global
管理组成员身份
可使用 *-ADGroupMember
或 *-ADPrincipalGroupMembership
cmdlet 以两种不同的方式进行组管理
这两者的差异在于,是侧重于对象和修改该对象所属的组,还是侧重于组和修改属于该组的成员
-
*-ADGroupMember
cmdlet 修改组的成员身份。 例如:- 可以添加或移除组成员。
- 可以将组列表传递给这些 cmdlet。
- 无法将成员列表通过管道传递给这些 cmdlet。
-
*-ADPrincipalGroupMembership
cmdlet 修改对象(例如用户)的组成员身份。 例如:- 可以将用户帐户添加为组成员。
- 无法向这些 cmdlet 提供组列表。
- 可以将成员列表通过管道传递给这些 cmdlet。
管理计算机帐户
Windows PowerShell 的 Active Directory 模块还具有用于创建、修改和删除计算机帐户的 cmdlet。 可以将这些 cmdlet 用于单个操作,或将其作为脚本的一部分来执行批量操作。 用于管理计算机对象的 cmdlet 的名称中带有“computer”这个词。
下表列出了可用于管理计算机帐户的 cmdlet:
Cmdlet | 说明 |
---|---|
New-ADComputer | 新建计算机帐户 |
Set-ADComputer | 修改计算机帐户的属性 |
Get-ADComputer | 显示计算机帐户的属性 |
Remove-ADComputer | 删除计算机帐户 |
Test-ComputerSecureChannel | 验证或修复计算机与域之间的信任关系 |
Reset-ComputerMachinePassword | 重置计算机帐户密码 |
新建计算机帐户
在将计算机加入域之前,可以使用 New-ADComputer cmdlet 命令新建一个计算机帐户
这样做是为了在部署计算机之前,可以在正确的 OU 中创建计算机帐户
下表列出了 New-ADComputer 的常用参数:
参数 | 说明 |
---|---|
‑Name | 定义计算机帐户的名称 |
‑Path | 定义会在其中创建计算机帐户的 OU 或容器 |
‑Enabled | 定义计算机帐户是启用还是禁用;默认情况下会启用计算机帐户,并生成随机密码 |
以下示例是可用于创建计算机帐户的命令:
New-ADComputer -Name LON-CL10 -Path "ou=marketing,dc=adatum,dc=com" -Enabled $true
意思是:
- 在 adatum.com 域 的 marketing OU 里
- 创建一个名为 LON-CL10 的计算机帐户
- 并且让它处于启用状态
解释如下:
-Path
- 指定计算机帐户要放在哪个 OU(组织单位)或容器里。
- 格式用 LDAP 路径:
"OU=marketing,DC=adatum,DC=com"
- OU=marketing → 组织单位是 marketing
- DC=adatum,DC=com → 域名是 adatum.com
如果不写-Path
,帐户会放在默认容器(通常是 CN=Computers)。
- DC=adatum,DC=com → 域名是 adatum.com
-Enabled
- 是否启用帐户。默认是 启用 (
$true
)。 - 如果你想先建一个占位帐户但不启用,可以设置
-Enabled $false
。 - 创建时系统会为计算机帐户生成一个随机密码(这是域内部机制,管理员一般不需要管)。
修复计算机账户的信任关系
在 Active Directory 里,每一台加入域的电脑(域成员)都有一个 计算机帐户,而这个帐户和域之间会建立一个“安全信道(Secure Channel)”。
如果这个信道坏掉了(最常见原因:域控的密码记录和计算机本机存的密码不同步),你登录域账号时会提示:
The trust relationship between this workstation and the primary domain failed.
修复方法如下
在 出问题的那台电脑 上,以管理员身份打开 PowerShell,运行:
Test-ComputerSecureChannel -Repair -Credential (Get-Credential)
-Repair
→ 尝试重新建立本机和域控制器的安全信道。-Credential
→ 需要输入一个有 域管理员权限 的账号,否则无法修复。- 如果修复成功,会返回
True
。
这样修复的好处是:不用把计算机退出域再重新加入,节省操作时间。
账户与设备管理cmdlet的区别
注意:这章节只是告诉你账户与计算机管理的命令区别而已
微软在 PowerShell 里把 AD 对象的管理 和 物理计算机的管理 分开了,你可以这么理解:
*-ADComputer
系列(AD 模块)- 作用:管理 Active Directory 中的计算机帐户对象。
- 它改的不是物理电脑,而是 AD 目录里的对象记录。
- 常见命令:
New-ADComputer
→ 新建计算机帐户Get-ADComputer
→ 查询计算机帐户Set-ADComputer
→ 修改计算机帐户属性(描述、OU、禁用/启用等)Remove-ADComputer
→ 删除计算机帐户
举例:
Get-ADComputer -Filter 'Name -like "LON-*"' -Properties OperatingSystem, LastLogonDate
这查的不是电脑本机信息,而是 AD 里存储的属性。
*-Computer
系列(核心 PowerShell)- 作用:管理 真实计算机(本地或远程)的操作系统和服务。
- 跟 AD 没关系,哪怕不是域成员,也能用。
- 常见命令:
Add-Computer
→ 把本机加入域或工作组Restart-Computer
→ 重启本机或远程机Stop-Computer
→ 关机Get-ComputerInfo
→ 查看本机系统属性
举例:
Add-Computer -DomainName adatum.com -Credential adatum\Admin01 -Restart
这条命令会把当前计算机加入adatum.com
域,并重启。
总结对比表
命令前缀 | 管理对象 | 使用场景 |
---|---|---|
*-ADComputer |
AD 中的计算机帐户对象 | 在 AD 中批量建账号、查询 OU 结构、修改帐户属性 |
*-Computer |
真实计算机(OS 层面) | 加入域、重启、关机、查询操作系统信息 |
类比
*-ADComputer
= 人事系统里的“员工档案”(管理目录里的记录)。*-Computer
= 员工本人(能让他上班、下班、休息)。
管理组织单位和 AD 对象
什么是组织单位 (OU)?
OU(Organizational Unit,组织单位) = AD 里的 逻辑容器。
- 它不是一个用户/计算机,而是用来 组织管理对象的“文件夹”。
- 可以无限层级嵌套。
OU 的用途:
- 分类管理对象(按部门、地点、功能来放用户/电脑)
- 比如:OU=Sales(销售部),OU=IT(技术部)
- 委派管理权限(把 OU 授权给某个部门管理员,只能管理自己 OU 下的对象)
- 应用组策略 (GPO)(OU 是 GPO 的主要作用范围,OU 下的用户和计算机会受到对应策略的约束)
举例:
- OU=Beijing(北京分公司)
- OU=Sales
- OU=HR
- OU=Tokyo(东京分公司)
- OU=Sales
- OU=IT
这样不同城市、不同部门都能有自己的管理范围。
OU 的 cmdlet
Windows PowerShell 提供可用于创建、修改和删除 Active Directory 域服务 (AD DS) 组织单位 (OU) 的 cmdlet
与用于用户、组和计算机的 cmdlet 一样,可以将这些 cmdlet 用于单个操作或作为脚本的一部分来执行批量操作
下表列出了可用于管理 OU 的 cmdlet:
Cmdlet | 说明 |
---|---|
New-ADOrganizationalUnit | 创建 OU |
Set-ADOrganizationalUnit | 修改 OU 的属性 |
Get-ADOrganizationalUnit | 显示 OU 的属性 |
Remove-ADOrganizationalUnit | 删除 OU |
创建新 OU
可以使用 New‑ADOrganizationalUnit cmdlet 创建新的 OU 来表示组织中的部门或物理位置
下表列出了 New‑ADOrganizationalUnit cmdlet 的常见参数
参数 | 说明 |
---|---|
‑Name | 定义新 OU 的名称 |
‑Path | 定义新 OU 的位置 |
‑ProtectedFromAccidentalDeletion | 防止任何人意外删除 OU;默认值为 $true |
以下示例是用于创建新 OU 的命令: |
New-ADOrganizationalUnit -Name Sales -Path "ou=marketing,dc=adatum,dc=com" -ProtectedFromAccidentalDeletion $true
AD 对象 cmdlet
*-ADObject
cmdlet 有时比特定于对象类型的 cmdlet 的执行速度更快,这是因为这些 cmdlet 在其操作中纳入了筛选适用对象集的成本
Cmdlet | 说明 |
---|---|
New-ADObject | 创建新的 Active Directory 对象 |
Set-ADObject | 修改 Active Directory 对象的属性 |
Get-ADObject | 显示 Active Directory 对象的属性 |
Remove-ADObject | 删除 Active Directory 对象 |
Rename-ADObject | 重命名 Active Directory 对象 |
Restore-ADObject | 从 Active Directory 回收站还原已删除的 Active Directory 对象 |
Move-ADObject | 将 Active Directory 对象从一个容器移动到另一个容器 |
Sync-ADObject | 在两个域控制器之间同步 Active Directory 对象 |
创建新的 AD 对象
可以使用 New‑ADObject cmdlet 创建对象
使用 New-ADObject 时,必须指定名称和对象类型
下表列出了 New‑ADObject 的常见参数:
参数 | 说明 |
---|---|
‑Name | 定义对象的名称 |
‑Type | 定义对象的 LDAP 类型 |
‑OtherAttributes | 定义无法从其他参数访问的对象的属性 |
‑Path | 定义在其中创建对象的容器 |
以下命令会创建新的联系人对象: |
New-ADObject -Name "AnaBowmancontact" -Type contact
实际案例
批量创建 OU
公司在北京、东京都有分公司,每个公司有 Sales、HR 部门
New-ADOrganizationalUnit -Name "Beijing" -Path "DC=adatum,DC=com"
New-ADOrganizationalUnit -Name "Tokyo" -Path "DC=adatum,DC=com"New-ADOrganizationalUnit -Name "Sales" -Path "OU=Beijing,DC=adatum,DC=com"
New-ADOrganizationalUnit -Name "HR" -Path "OU=Beijing,DC=adatum,DC=com"
New-ADOrganizationalUnit -Name "Sales" -Path "OU=Tokyo,DC=adatum,DC=com"
New-ADOrganizationalUnit -Name "IT" -Path "OU=Tokyo,DC=adatum,DC=com"
批量把用户放入 OU
自动把所有部门属性为 "Sales" 的用户放进 Sales OU。
Get-ADUser -Filter {Department -eq "Sales"} | Move-ADObject -TargetPath "OU=Sales,OU=Beijing,DC=adatum,DC=com"
恢复误删的用户
从 AD 回收站恢复 Alice 用户。
Restore-ADObject -Identity "CN=Alice,OU=Sales,DC=adatum,DC=com"
设备的网络服务设置
管理 IP 地址
可以将 Get-Command 命令与 -Module NetTCPIP 参数配合使用来对其进行查找
下表列出了用于管理 IP 地址设置的常用 cmdlet:
Cmdlet | 说明 |
---|---|
New-NetIPAddress | 创建新的 IP 地址 |
Get-NetIPAddress | 显示 IP 地址的属性 |
Set-NetIPAddress | 修改 IP 地址的属性 |
Remove-NetIPAddress | 删除 IP 地址 |
创建新的 IP 地址设置
New-NetIPAddress cmdlet 需要 IPv4 或 IPv6 地址以及网络接口的别名或索引
最佳做法是,还应同时设置默认网关和子网掩码
下表列出了 New-NetIPAddress cmdlet 的常用参数
参数 | 说明 |
---|---|
-IPAddress | 定义要创建的 IPv4 或 IPv6 地址 |
-InterfaceIndex | 为 IP 地址通过索引定义网络接口 |
-InterfaceAlias | 按名称为 IP 地址定义网络接口 |
-DefaultGateway | 定义默认网关主机的 IPv4 或 IPv6 地址 |
-PrefixLength | 定义 IP 地址的子网掩码 |
以下命令创建针对以太网接口的新 IP 地址: |
New-NetIPAddress -IPAddress 192.168.1.10 -InterfaceAlias "Ethernet" -PrefixLength 24 -DefaultGateway 192.168.1.1
New-NetIPAddress cmdlet 还接受 –AddressFamily 参数,该参数可定义 IPv4 或 IPv6 IP 地址系列。 如果不使用此参数,将自动检测地址族属性。
实际案例
获取 IP 信息
显示 WLAN 网卡的所有 IP(包括 IPv4/IPv6)
Get-NetIPAddress -InterfaceAlias "WLAN"
新建静态 IP
给 Ethernet 配置一个固定 IP
New-NetIPAddress -IPAddress 192.168.1.50 -InterfaceAlias "Ethernet" -PrefixLength 24 -DefaultGateway 192.168.1.1
修改 IP
直接set即可
Set-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.100 -PrefixLength 24
删除 IP
删除网卡上的某个 IP
Set-NetIPInterface -InterfaceAlias "Ethernet" -Dhcp Enabled
管理 IP 路由
IP 路由根据目标 IP 地址转接数据包
此路由基于路由表,虽然条目会自动生成,但可能需要手动添加、删除或修改路由表条目 NETTCPIP PowerShell 模块
还包括用于管理 Windows 服务器和设备的路由表的 cmdlet
下表列出了用于管理路由表条目和设置的常用 cmdlet:
Cmdlet | 说明 |
---|---|
New-NetRoute | 在 IP 路由表中创建一个条目 |
Get-NetRoute | 从 IP 路由表检索条目 |
Set-NetRoute | 修改 IP 路由表中条目的属性 |
Remove-NetRoute | 从 IP 路由表删除条目 |
Find-NetRoute | 标识到达远程地址的最佳本地 IP 地址和路由 |
创建 IP 路由表条目
可以使用 New-NetRoute cmdlet 在 Windows 计算机上创建路由表条目
New-NetRoute cmdlet 要求标识网络接口和目标前缀
下表列出了 New-NetRoute cmdlet 的常用参数:
参数 | 说明 |
---|---|
‑DestinationPrefix | 定义 IP 路由的目标前缀 |
‑InterfaceAlias | 按别名为 IP 路由定义网络接口 |
‑InterfaceIndex | 按索引为 IP 路由定义网络接口 |
‑NextHop | 定义 IP 路由的下一个跃点 |
‑RouteMetric | 定义 IP 路由的路由指标 |
以下命令会创建 IP 路由表条目: |
New-NetRoute -DestinationPrefix 0.0.0.0/24 -InterfaceAlias "Ethernet" -DefaultGateway 192.168.1.1
实际案例
查看路由表
类似 Linux 的 route -n
/ ip route show
Get-NetRoute | Sort-Object RouteMetric
添加路由
让发往 10.10.0.0/16
的流量走网关 192.168.1.1
,优先级 20
New-NetRoute -DestinationPrefix "10.10.0.0/16" -InterfaceAlias "Ethernet" -NextHop 192.168.1.1 -RouteMetric 20
修改路由
把目标网络的下一跳换掉
Set-NetRoute -DestinationPrefix "10.10.0.0/16" -NextHop 192.168.1.254
删除路由
Remove-NetRoute -DestinationPrefix "10.10.0.0/16" -InterfaceAlias "Ethernet" -Confirm:$false
管理 DNS 客户端
PowerShell 提供用于管理 DNS 客户端设置、DNS 名称查询解析以及保护 DNS 客户端的 cmdlet
下表列出了用于修改 DNS 客户端设置的常见 cmdlet:
Cmdlet | 说明 |
---|---|
Get-DnsClient | 获取有关网络接口的详细信息 |
Set-DnsClient | 设置网络接口的 DNS 客户端配置设置 |
Get-DnsClientServerAddress | 获取网络接口的 DNS 服务器地址设置 |
Set-DnsClientServerAddress | 设置网络接口的 DNS 服务器地址 |
以下命令为接口设置特定于连接的后缀:
Set-DnsClient -InterfaceAlias Ethernet -ConnectionSpecificSuffix "adatum.com"
实际案例
获取DNS配置
Get-DnsClientServerAddress -InterfaceAlias "WLAN"
设置 DNS 服务器
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("8.8.8.8","8.8.4.4")
把 DNS 改成 Google DNS
恢复自动获取 DNS
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ResetServerAddresses
设置连接特定的 DNS 后缀
Set-DnsClient -InterfaceAlias "Ethernet" -ConnectionSpecificSuffix "corp.adatum.com"
防火墙设置
PowerShell 支持 NetSecurity 模块
下表列出了用于管理防火墙设置和规则的常见 cmdlet:
Cmdlet | 说明 |
---|---|
New-NetFirewallRule | 创建新的防火墙规则 |
Set-NetFirewallRule | 设置防火墙规则的属性 |
Get-NetFirewallRule | 获取防火墙规则的属性 |
Remove-NetFirewallRule | 删除防火墙规则。 |
Rename-NetFirewallRule | 重命名防火墙规则 |
Copy-NetFirewallRule | 创建防火墙规则的副本 |
Enable-NetFirewallRule | 启用防火墙规则 |
Disable-NetFirewallRule | 禁用防火墙规则 |
Get-NetFirewallProfile | 获取防火墙配置文件的属性 |
Set-NetFirewallProfile | 设置防火墙配置文件的属性 |
可以使用 Get-NetFirewallRule cmdlet 检索防火墙规则的设置
使用以下 cmdlet 之一启用或禁用规则:
- 具有 -Enabled 参数的 Set-NetFirewallRule cmdlet
- Enable-NetFirewallRule 或 Disable-NetFirewallRule cmdlet。
以下命令都可以启用“远程访问”组中的防火墙规则:
Enable-NetFirewallRule -DisplayGroup "Remote Access"Set-NetFirewallRule -DisplayGroup "Remote Access" -Enabled True
实际案例
查看所有防火墙规则
Get-NetFirewallRule | Select-Object DisplayName, Enabled, Direction, Action
启用防火墙规则
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
添加新规则(允许 TCP 8080)
New-NetFirewallRule -DisplayName "Allow TCP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
禁用规则
Disable-NetFirewallRule -DisplayName "Allow TCP 8080"
删除规则
Remove-NetFirewallRule -DisplayName "Allow TCP 8080"
管理 Windows Server 设置
自动执行管理任务
什么是 GPO?
- GPO (Group Policy Object,组策略对象) 是一种集中管理机制,用于在 Active Directory 域环境下对用户和计算机的配置进行统一管理。
- 通过 GPO,管理员可以控制:
- 用户登录脚本、桌面壁纸、软件安装
- 安全设置(如密码策略、账户锁定策略)
- Windows 防火墙、网络配置、注册表项
- 应用程序限制(禁止运行某些程序)
换句话说:
- 没有 GPO → 每台机器单独设置,很累。
- 有了 GPO → 一次配置,全域用户/计算机自动应用。
GPO 管理 Cmdlet 模块:GroupPolicy
需要 RSAT 工具 (Remote Server Administration Tools),默认在域控服务器有
Cmdlet | 说明 |
---|---|
New-GPO | 创建新 GPO |
Get-GPO | 检索 GPO |
Set-GPO | 修改 GPO 的属性 |
Remove-GPO | 删除 GPO |
Rename-GPO | 重命名 GPO |
Backup-GPO | 备份域中的一个或多个 GPO |
Copy-GPO | 将 GPO 从一个域复制到另一个域 |
Restore-GPO | 从备份文件还原 GPO |
New-GPLink | 将 GPO 链接到 AD DS 容器 |
Import-GPO | 从备份的 GPO 导入 GPO 设置 |
Set-GPRegistryValue | 在 GPO 中配置一个或多个基于注册表的策略设置 |
常见任务
创建一个新的 GPO
New-GPO -Name "IT Security Policy" -Comment "强制IT部门安全策略"
创建名为 IT Security Policy 的 GPO(但还没应用到 OU)
将 GPO 链接到 OU
New-GPLink -Name "IT Security Policy" -Target "OU=IT,DC=adatum,DC=com"
把 GPO 链接到 IT 部门 OU,里面的计算机和用户就会收到该策略。
设置策略项(基于注册表的)
比如:强制屏幕保护程序 10 分钟后自动启动:
Set-GPRegistryValue -Name "IT Security Policy" `-Key "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" `-ValueName "ScreenSaveTimeOut" `-Type String `-Value "600"
600 秒 = 10 分钟。所有应用此 GPO 的用户都会被强制执行。
生成报告
Get-GPOReport -Name "IT Security Policy" -ReportType Html -Path "C:\Reports\ITSecurityGPO.html"
导出 GPO 的详细设置,方便审计。
备份 & 还原
备份所有 GPO:
Backup-GPO -All -Path "C:\GPOBackups"
还原某个 GPO:
Restore-GPO -Name "IT Security Policy" -Path "C:\GPOBackups"
实际案例
案例 1:统一安全策略
- 需求:全公司用户密码策略 → 最少 12 位,90 天过期。
- 做法:
- 创建
Security Baseline GPO
- 配置密码策略、锁定策略
- 链接到 域根 (DC=adatum,DC=com)
全域用户自动生效。
- 创建
案例 2:应用部门桌面壁纸
- 需求:市场部电脑统一壁纸为公司 logo
- 做法:
Set-GPRegistryValue -Name "Marketing GPO" ` -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" ` -ValueName "Wallpaper" ` -Type String ` -Value "\\fileserver\share\wallpapers\company.jpg"
链接到 OU=Marketing
,市场部电脑就统一壁纸。
案例 3:软件限制
- 需求:禁止运行游戏程序
game.exe
- 做法:创建 GPO → 配置软件限制策略 (SRP) → 链接到
OU=Students
。
学生机一运行game.exe
就被拦截。
管理服务器角色和服务
常见 Cmdlet(ServerManager 模块)
Cmdlet | 说明 |
---|---|
Get-WindowsFeature | 查看所有角色和功能,包含是否已安装 |
Install-WindowsFeature | 安装角色或功能(等价于 GUI 里的 “添加角色和功能” 向导) |
Uninstall-WindowsFeature | 卸载角色或功能 |
注意:这些 Cmdlet 只在 Windows Server 上能用,如果在 Windows 10/11 上运行,会报错。
常见角色和功能示例
角色/功能名称 = 内部名字(有别名)。
可用 Get-WindowsFeature
查看完整列表。
- IIS (Web-Server) → 互联网信息服务 (Web 服务器)
- AD-Domain-Services → Active Directory 域服务
- DNS → DNS 服务器
- DHCP → DHCP 服务
- NPAS → 网络策略和访问服务
- RSAT → 远程服务器管理工具
- Hyper-V → 虚拟化
实际案例
查看本机已安装/可安装的角色和功能
输出表格,[X]
表示已安装,[ ]
表示未安装。
Get-WindowsFeature
安装角色或功能(单台服务器)
安装 IIS 角色,并附带管理工具。
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
卸载角色或功能
卸载IIS
Uninstall-WindowsFeature -Name Web-Server
在远程服务器上安装功能
$servers = "Server01","Server02","Server03"
foreach ($srv in $servers) {Install-WindowsFeature -Name Web-Server -ComputerName $srv -IncludeManagementTools
}
一次性给多台服务器装 IIS。
导出/导入服务器角色配置
导出一台服务器的角色/功能列表:
Get-WindowsFeature | Where-Object Installed | Export-Clixml "C:\roles.xml"
在另一台服务器上安装同样的配置:
$roles = Import-Clixml "C:\roles.xml"
$roles | Where-Object Installed | ForEach-Object {Install-WindowsFeature -Name $_.Name
}
实现 “一键克隆配置”
管理 Hyper-V 虚拟机
- Hyper-V 模块 提供 200+ 个 PowerShell Cmdlet,用来管理虚拟机、虚拟硬盘、虚拟交换机等虚拟化资源。
- 可以在两种环境里使用:
- Windows Server 安装 Hyper-V 角色时,自带 PowerShell 模块。
- Windows 10/11 专业版或企业版 安装 Hyper-V 功能时,包含 Hyper-V 管理工具模块。
Cmdlet 命名前缀
- VM → 虚拟机相关(Get-VM、Start-VM …)
- VHD → 虚拟硬盘(New-VHD、Resize-VHD …)
- VFD → 虚拟软盘(很少用,基本过时)
常见虚拟机管理 Cmdlet
Cmdlet | 功能 |
---|---|
Get-VM | 获取虚拟机信息(状态、CPU、内存、磁盘等) |
New-VM | 新建虚拟机(指定名称、内存、虚拟磁盘等) |
Set-VM | 修改虚拟机配置(CPU、内存、网络适配器等) |
Start-VM | 启动虚拟机 |
Stop-VM | 关闭虚拟机(等价于强制关机或正常关机,可选 -Force ) |
Restart-VM | 重启虚拟机 |
Suspend-VM | 暂停虚拟机(挂起状态) |
Resume-VM | 恢复挂起的虚拟机 |
Checkpoint-VM | 给虚拟机创建检查点(快照) |
Export-VM | 导出虚拟机(完整配置+磁盘) |
Import-VM | 从导出文件导入虚拟机 |
常见虚拟硬盘 Cmdlet
Cmdlet | 功能 |
---|---|
New-VHD | 创建虚拟硬盘(固定大小 / 动态扩展) |
Resize-VHD | 调整 VHD 文件大小 |
Mount-VHD | 挂载 VHD 到宿主系统 |
Dismount-VHD | 卸载 VHD |
实际案例
获取所有虚拟机信息
Get-VM
显示虚拟机的 名称、状态、CPU 使用率、内存分配 等。
新建虚拟机
New-VM -Name "TestVM" -MemoryStartupBytes 2GB -NewVHDPath "D:\VMs\TestVM\TestVM.vhdx" -NewVHDSizeBytes 40GB -Generation 2 -SwitchName "Default Switch"
创建一台名为 TestVM
的二代虚拟机,分配 2GB 内存、40GB 虚拟磁盘,并连接到默认交换机。
修改虚拟机配置
Set-VM -Name "TestVM" -MemoryStartupBytes 4GB -ProcessorCount 4
把虚拟机内存改成 4GB,CPU 改为 4 核。
启动、暂停、关闭虚拟机
Start-VM -Name "TestVM"
Suspend-VM -Name "TestVM"
Resume-VM -Name "TestVM"
Stop-VM -Name "TestVM" -Force
类似物理机的开机、挂起、恢复、强制关机。
创建快照(检查点)
Checkpoint-VM -Name "TestVM" -SnapshotName "BeforeUpdate"
给虚拟机打一个快照,方便出问题时回滚。
导出 / 导入虚拟机
Export-VM -Name "TestVM" -Path "D:\VMBackup\TestVM"
Import-VM -Path "D:\VMBackup\TestVM\TestVM.vmcx"
把虚拟机完整导出到备份目录,然后导入到同一台或另一台服务器。
管理 IIS
- IIS(Internet Information Services) 是 Windows 自带的 Web 服务器角色。
- 通过 PowerShell,可以自动化管理 站点、应用程序、虚拟目录、应用程序池 等。
- 模块:
- IISAdministration(推荐,较新,未来标准) → Cmdlet 前缀:
IIS
- WebAdministration(老模块,仍能用) → Cmdlet 前缀:
Web
一般来说:
- IISAdministration(推荐,较新,未来标准) → Cmdlet 前缀:
- 管理 网站/站点 →
IISSite
- 管理 Web 应用 →
WebApplication
- 管理 应用程序池 →
WebAppPool
常见 IIS Cmdlet
Cmdlet | 功能 |
---|---|
New-IISSite | 新建 IIS 网站(指定物理路径、端口、主机头) |
Get-IISSite | 获取现有 IIS 网站信息 |
Start-IISSite | 启动站点 |
Stop-IISSite | 停止站点 |
New-WebApplication | 在现有站点下创建 Web 应用 |
Remove-WebApplication | 删除 Web 应用 |
New-WebAppPool | 创建新的应用程序池 |
Restart-WebAppPool | 重启应用程序池 |
实际案例
创建一个新网站
New-IISSite -Name "MySite" -PhysicalPath "C:\inetpub\mysite" -BindingInformation "*:8080:"
创建一个名为 MySite 的网站,绑定端口 8080
,使用本地目录 C:\inetpub\mysite
查看所有网站状态
Get-IISSite
输出站点列表,包括名称、ID、状态(Started/Stopped)、绑定信息。
启动 / 停止网站
Start-IISSite -Name "MySite"
Stop-IISSite -Name "MySite"
类似 IIS 管理器里的 启动/停止按钮。
创建 Web 应用程序
New-WebApplication -Name "ShopApp" -Site "MySite" -PhysicalPath "C:\inetpub\mysite\shop" -ApplicationPool "ShopPool"
在 MySite 站点下创建名为 ShopApp 的 Web 应用,物理路径是 shop
文件夹,并分配到应用程序池 ShopPool。
创建应用程序池
New-WebAppPool -Name "ShopPool"
创建名为 ShopPool 的应用程序池。
重启应用程序池
Restart-WebAppPool -Name "ShopPool"
解决 Web 应用 内存泄漏或进程卡死 的常见做法。
管理本地计算机的设置
下表列出了 Microsoft.PowerShell.Management 模块中包含的一些更常见的 cmdlet:
Cmdlet | 描述 |
---|---|
Get-ComputerInfo | 从计算机检索所有系统和操作系统属性 |
Get-Service | 检索计算机上的所有服务的列表 |
Get-EventLog | 从本地和远程计算机检索事件和事件日志(仅在 Windows PowerShell 5.1 中可用) |
Get-Process | 检索本地或远程计算机上所有活动进程的列表 |
Stop-Service | 停止一个或多个正在运行的服务 |
Stop-Process | 停止一个或多个正在运行的进程 |
Stop-Computer | 关闭本地和远程计算机 |
Clear-EventLog | 删除本地计算机或远程计算机上的指定事件日志中的所有条目 |
Clear-RecycleBin | 清空计算机回收站的内容 |
Restart-Computer | 重新启动本地和远程计算机上的操作系统 |
Restart-Service | 停止然后启动一项或多项服务 |
运行管理 cmdlet
若要检索有关本地计算机的详细信息,请运行以下命令:
Get-ComputerInfo
若要从应用程序日志检索最新的五个错误条目,请运行以下命令:
Get-EventLog -LogName Application -Newest 5 -EntryType Error
若要清除本地计算机上的应用程序日志,请运行以下命令:
Clear-EventLog -LogName Application
管理权限
Microsoft.PowerShell.Security 模块包含许多内置 cmdlet,可用于管理 Windows 计算机上的基本安全功能。 若要查看此模块中包含的 cmdlet,可以输入以下命令:
Get-command -module Microsoft.PowerShell.Security
要管理对文件或文件夹的访问权限,可使用 Microsoft.PowerShell.Security 模块中包含的以下 cmdlet:
Cmdlet | 描述 |
---|---|
Get-Acl | 此 cmdlet 获取表示文件或资源安全描述符的对象。 安全描述符包括资源的访问控制列表 (ACL)。 ACL 列出了用户和组访问资源所具有的权限。 |
Set-Acl | 此 cmdlet 更改指定项(例如文件、文件夹或注册表项)的安全描述符,用于匹配提供的安全描述符中的值。 |
检索访问权限
Get-Acl 显示对象的安全描述符
Get-Acl -Path C:\Folder1|Format-List
通过使用以下命令,可检索更详细的访问属性列表,其中包含指定对象的文件系统权限、访问控制类型和继承设置:
(Get-Acl -Path C:\Folder1).Access
还可以仅检索以表格格式设置的特定 Access 属性,如以下示例所示:
(Get-Acl -Path C:\Folder1).Access|Format-Table IdentityReference, FileSystemRights, AccessControlType, IsInherited
更新文件和文件夹访问权限
Set-Acl cmdlet 用于将更改应用到特定对象的 ACL。 修改文件或文件夹权限的过程包括以下步骤:
- 使用 Get-Acl 检索对象的现有 ACL 规则。
- 新建 FileSystemAccessRule,并将其应用于对象。
- 将新规则添加到现有 ACL 权限集。
- 使用 Set-Acl 将新 ACL 应用于现有文件或文件夹。
第一步是声明包含 Folder1 的现有 ACL 规则的变量:
$ACL = Get-Acl -Path C:\Folder1
第二步是新建 FileSystemAccessRule 变量,该变量指定要应用的访问规范:
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("User1","Modify","Allow")
第三步是将新的访问规则添加到 Folder1 的现有 ACL 规则中:
$ACL.SetAccessRule($AccessRule)
最后,需要将新的 ACL 应用于 Folder1:
$ACL | Set-Acl -Path C:\Folder1
将安全描述符复制到新对象
如果要将确切的安全描述符复制到新对象,可以使用 Get-Acl 和 Set-Acl 命令的组合,如下所示:
Get-Acl -Path C:\Folder1|Set-ACL -Path C:\Folder2
这些命令将值从 C:\Folder1 的安全描述符复制到 Folder2 的安全描述符。 命令完成后,两个文件夹的安全描述符是相同的。