Powershell維護系統管理任務(五)
維護系統管理任務
管理 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 以兩種不同的方式進行組管理
這兩者的差異在于,是側重于對象和修改該對象所屬的組,還是側重于組和修改屬于該組的成員
-
*-ADGroupMembercmdlet 修改組的成員身份。 例如:- 可以添加或移除組成員。
- 可以將組列表傳遞給這些 cmdlet。
- 無法將成員列表通過管道傳遞給這些 cmdlet。
-
*-ADPrincipalGroupMembershipcmdlet 修改對象(例如用戶)的組成員身份。 例如:- 可以將用戶帳戶添加為組成員。
- 無法向這些 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 的安全描述符。 命令完成后,兩個文件夾的安全描述符是相同的。
本文來自博客園,作者:竹等寒,轉載請注明原文鏈接。

浙公網安備 33010602011771號