目录
- 维护系统管理任务
- 管理 AD 域服务
- 管理组和组成员身份
- 管理计算机帐户
- 新建计算机帐户
- 修复计算机账户的信任关系
- 账户与设备管理cmdlet的区别
- 管理组织单位和 AD 对象
- 什么是组织单位 (OU)?
- OU 的 cmdlet
- AD 对象 cmdlet
- 实际案例
- 批量创建 OU
- 批量把用户放入 OU
- 恢复误删的用户
- 设备的网络服务设置
- 管理 IP 地址
- 管理 IP 路由
- 管理 DNS 客户端
- 防火墙设置
- 管理 Windows Server 设置
- 自动执行管理任务
- 管理服务器角色和服务
- 管理 Hyper-V 虚拟机
- 管理 IIS
- 管理本地计算机的设置
- 运行管理 cmdlet
- 管理权限
- 检索访问权限
- 更新文件和文件夹访问权限
- 将安全描述符复制到新对象
维护系统管理任务
管理 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)。
-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 域,并重启。
总结对比表
命令前缀管理对象使用场景*-ADComputerAD 中的计算机帐户对象在 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=Tokyo(东京分公司)
- OU=Sales
- OU=IT
这样不同城市、不同部门都能有自己的管理范围。
OU 的 cmdlet
Windows PowerShell 提供可用于创建、修改和删除 Active Directory 域服务 (AD DS) 组织单位 (OU) 的 cmdlet
与用于用户、组和计算机的 cmdlet 一样,可以将这些 cmdlet 用于单个操作或作为脚本的一部分来执行批量操作
下表列出了可用于管理 OU 的 cmdlet:
Cmdlet说明New-ADOrganizationalUnit创建 OUSet-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创建新 GPOGet-GPO检索 GPOSet-GPO修改 GPO 的属性Remove-GPO删除 GPORename-GPO重命名 GPOBackup-GPO备份域中的一个或多个 GPOCopy-GPO将 GPO 从一个域复制到另一个域Restore-GPO从备份文件还原 GPONew-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] 表示已安装,[ ] 表示未安装。安装角色或功能(单台服务器)
安装 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实际案例
获取所有虚拟机信息显示虚拟机的 名称、状态、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
一般来说:
- 管理 网站/站点 → 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
查看所有网站状态输出站点列表,包括名称、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-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 的安全描述符。 命令完成后,两个文件夹的安全描述符是相同的。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |