> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/vi/module-8-nha-phat-trien-and-devops/03-powershell-module.md).

# Mô-đun PowerShell (PSVergeOS)

**PSVergeOS** là một mô-đun PowerShell đa nền tảng cung cấp **hơn 200 cmdlet** để quản lý hạ tầng VergeOS thông qua REST API. Nếu nhóm của bạn đã sử dụng PowerShell cho quản lý Windows Server, Active Directory hoặc VMware, PSVergeOS cho phép bạn mở rộng chính những quy trình làm việc và mẫu scripting đó sang VergeOS — với hỗ trợ pipeline đầy đủ, tự hoàn thành tab và `Động từ-Danh từ` quy ước đặt tên cmdlet.

## Yêu cầu & Cài đặt

| Yêu cầu        | Phiên bản             |
| -------------- | --------------------- |
| **PowerShell** | 7.4 trở lên           |
| **VergeOS**    | 26.0 trở lên          |
| **Nền tảng**   | Windows, macOS, Linux |

### Từ PowerShell Gallery (Khuyến nghị)

```powershell
Install-Module -Name PSVergeOS -Scope CurrentUser
```

### Cài đặt thủ công (Phát triển)

```powershell
git clone https://github.com/verge-io/PSVergeOS.git
Import-Module ./PSVergeOS/PSVergeOS.psd1
```

### Xác minh cài đặt

```powershell
Get-Module PSVergeOS -ListAvailable
Get-Command -Module PSVergeOS | Measure-Object  # Nên hiển thị 200+ cmdlet
```

## Xác thực

PSVergeOS hỗ trợ nhiều phương thức xác thực để phù hợp với các môi trường khác nhau — từ các phiên quản trị tương tác đến các pipeline tự động hoàn toàn.

### Thông tin đăng nhập tương tác

Nhắc nhập tên người dùng và mật khẩu tại thời điểm kết nối:

```powershell
Connect-VergeOS -Server "vergeos.example.com"
# Nhắc nhập thông tin đăng nhập tương tác
```

### Đối tượng PSCredential

Lưu trữ thông tin đăng nhập an toàn cho các script không tương tác:

```powershell
$cred = Get-Credential
Connect-VergeOS -Server "vergeos.example.com" -Credential $cred
```

### API Token

Sử dụng token API được tạo sẵn cho các pipeline tự động:

```powershell
Connect-VergeOS -Server "vergeos.example.com" -Token $env:VERGEOS_TOKEN
```

### Chứng chỉ tự ký

Dành cho các môi trường lab và phát triển có chứng chỉ tự ký:

```powershell
Connect-VergeOS -Server "192.168.1.100" -Token $token -SkipCertificateCheck
```

{% hint style="warning" %}
Chỉ sử dụng `-SkipCertificateCheck` trong các môi trường thử nghiệm. Đối với hệ thống production, hãy cấu hình chứng chỉ SSL hợp lệ.
{% endhint %}

## Quản lý nhiều máy chủ

PSVergeOS có thể quản lý **nhiều hệ thống VergeOS** từ một phiên PowerShell duy nhất. Dùng tham số `-PassThru` để nắm bắt các đối tượng kết nối và tham số `-Server` để nhắm tới các hệ thống cụ thể:

```powershell
# Kết nối đến nhiều hệ thống
$prod = Connect-VergeOS -Server "prod.vergeos.local" -Token $env:PROD_TOKEN -PassThru
$dev  = Connect-VergeOS -Server "dev.vergeos.local"  -Token $env:DEV_TOKEN  -PassThru

# Truy vấn VM trên một máy chủ cụ thể
Get-VergeVM -Server $prod
Get-VergeVM -Server $dev

# Chuyển kết nối mặc định
Set-VergeConnection -Server "prod.vergeos.local"
```

Điều này đặc biệt hữu ích cho **MSP** quản lý nhiều môi trường khách hàng hoặc tổ chức với các cụm VergeOS production và development riêng biệt.

## Danh mục cmdlet

Mô-đun tổ chức hơn 200 cmdlet của nó thành các danh mục chức năng. Mỗi danh mục bao phủ toàn bộ vòng đời CRUD cộng với các hành động đặc thù của tài nguyên.

| Danh mục              | Mô tả                                                      |
| --------------------- | ---------------------------------------------------------- |
| **Kết nối**           | Kết nối, ngắt kết nối, quản lý kết nối máy chủ             |
| **Máy ảo**            | Vòng đời, điều khiển nguồn, snapshot, ổ đĩa, NIC, sao chép |
| **Mạng**              | Mạng ảo, quy tắc tường lửa, DNS, DHCP, chẩn đoán           |
| **VPN**               | Kết nối/chính sách IPSec, giao diện/peer WireGuard         |
| **NAS & Lưu trữ**     | Dịch vụ NAS, volume, chia sẻ CIFS/NFS, snapshot, đồng bộ   |
| **Tenants**           | Cấp phát, snapshot, phân bổ block lưu trữ/mạng             |
| **Người dùng & Nhóm** | Quản lý tài khoản, quyền, khóa API                         |
| **Hệ thống**          | Cụm, nút, giấy phép, cài đặt                               |
| **Chứng chỉ**         | Quản lý chứng chỉ SSL                                      |
| **Thẻ**               | Gắn thẻ và phân loại tài nguyên                            |
| **Webhook**           | Hook tự động hóa theo sự kiện                              |
| **Giám sát & Tác vụ** | Cảnh báo, nhật ký, theo dõi tác vụ bất đồng bộ             |
| **Sao lưu & DR**      | Hồ sơ snapshot, snapshot đám mây, quản lý site, đồng bộ    |
| **Tệp & Phương tiện** | Quản lý ISO, tải tệp lên                                   |
| **Nhóm tài nguyên**   | Nhóm tài nguyên logic                                      |

### Cmdlet VPN (IPSec & WireGuard)

Danh mục VPN đáng được chú ý đặc biệt — PSVergeOS cung cấp quản lý đầy đủ cho cả triển khai VPN IPSec và WireGuard:

**IPSec:**

* `New-VergeIPSecConnection` / `Get-VergeIPSecConnection` / `Remove-VergeIPSecConnection`
* `New-VergeIPSecPolicy` / `Get-VergeIPSecPolicy` / `Remove-VergeIPSecPolicy`

**WireGuard:**

* `New-VergeWireGuardInterface` / `Get-VergeWireGuardInterface` / `Remove-VergeWireGuardInterface`
* `New-VergeWireGuardPeer` / `Get-VergeWireGuardPeer` / `Remove-VergeWireGuardPeer`

## Hỗ trợ Pipeline

Một trong những điểm mạnh lớn nhất của PSVergeOS là **hỗ trợ đầy đủ pipeline của PowerShell**. Cmdlet chấp nhận đầu vào từ pipeline và tạo đầu ra cho pipeline, cho phép viết các one-liner ngắn gọn cho các tác vụ hàng loạt:

```powershell
# Dừng tất cả VM development
Get-VergeVM -Name "Dev-*" | Stop-VergeVM -Confirm:$false

# Chụp snapshot tất cả VM production
Get-VergeVM -Name "Prod-*" | ForEach-Object {
    New-VergeVMSnapshot -VMName $_.Name -Name "Daily-$(Get-Date -Format 'yyyyMMdd')"
}

# Bật nguồn tất cả VM trong một mạng cụ thể
Get-VergeVM | Where-Object { $_.Network -eq "app-network" } | Start-VergeVM
```

Hỗ trợ pipeline làm cho PSVergeOS đặc biệt hiệu quả cho **bảo trì theo lịch** các tác vụ tích hợp với Windows Task Scheduler hoặc Linux cron jobs.

## Ví dụ thực tế

### Snapshot hàng loạt với chính sách lưu giữ

```powershell
# Kết nối đến hệ thống VergeOS
Connect-VergeOS -Server "vergeos.example.com" -Token $env:VERGEOS_TOKEN

# Chụp snapshot tất cả VM production đang chạy với thời gian lưu giữ 24 giờ
$vms = Get-VergeVM -Name "Prod-*" | Where-Object { $_.PowerState -eq "Running" }

foreach ($vm in $vms) {
    $snapshot = New-VergeVMSnapshot -VMName $vm.Name `
        -Name "Nightly-$(Get-Date -Format 'yyyyMMdd-HHmm')" `
        -Retention 86400
    Write-Host "Đã chụp snapshot cho $($vm.Name): $($snapshot.Name)"
}

Write-Host "Đã hoàn thành $($vms.Count) snapshot"
```

### Xuất CSV kiểm kê VM

```powershell
# Xuất toàn bộ kiểm kê VM sang CSV để báo cáo
Get-VergeVM | Select-Object Name, PowerState, RAM, CPUCores, OS,
    @{N='DiskGB'; E={[math]::Round($_.DiskSize / 1GB, 2)}},
    Created, Description |
    Export-Csv -Path "vm-inventory-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

Write-Host "Đã xuất kiểm kê ra vm-inventory-$(Get-Date -Format 'yyyyMMdd').csv"
```

### Tạo mạng với quy tắc tường lửa

```powershell
# Tạo một mạng nội bộ với DHCP và các quy tắc tường lửa
$network = New-VergeNetwork -Name "web-tier" `
    -NetworkAddress "10.20.1.0/24" `
    -IPAddress "10.20.1.1" `
    -DHCPEnabled $true

# Thêm các quy tắc tường lửa
New-VergeNetworkRule -Network $network.Name `
    -Name "Cho phép HTTPS" -Action Accept -Protocol TCP -DestPort 443

New-VergeNetworkRule -Network $network.Name `
    -Name "Cho phép SSH" -Action Accept -Protocol TCP -DestPort 22

# Áp dụng các quy tắc và bật nguồn
Invoke-VergeNetworkApplyRules -Network $network.Name
Start-VergeNetwork -Name $network.Name

Write-Host "Mạng '$($network.Name)' đã hoạt động với các quy tắc tường lửa được áp dụng"
```

### Báo cáo tài nguyên đa tenant

```powershell
# Tạo báo cáo tổng hợp tài nguyên trên tất cả tenant
$report = @()

foreach ($tenant in Get-VergeTenant) {
    $tenantVMs = Get-VergeVM -Tenant $tenant.Name
    $report += [PSCustomObject]@{
        Tenant    = $tenant.Name
        VMCount   = $tenantVMs.Count
        TotalRAM  = ($tenantVMs | Measure-Object -Property RAM -Sum).Sum
        TotalCPU  = ($tenantVMs | Measure-Object -Property CPUCores -Sum).Sum
        Running   = ($tenantVMs | Where-Object PowerState -eq "Running").Count
        Stopped   = ($tenantVMs | Where-Object PowerState -ne "Running").Count
    }
}

$report | Format-Table -AutoSize
$report | Export-Csv "tenant-report.csv" -NoTypeInformation
```

### Thiết lập WireGuard VPN

```powershell
# Tạo một giao diện WireGuard trên mạng ngoài
$wgInterface = New-VergeWireGuardInterface -Network "External" `
    -Name "Remote-Access" `
    -IPAddress "10.100.0.1/24" `
    -ListenPort 51820

# Thêm peer cho một người dùng từ xa
New-VergeWireGuardPeer -Interface $wgInterface.Name `
    -Name "Engineer-1" `
    -AllowedIPs "10.100.0.2/32" `
    -AutoGenerateConfig $true

# Áp dụng các quy tắc mạng
Invoke-VergeNetworkApplyRules -Network "External"
```

## Tích hợp với Task Scheduler

Các script PSVergeOS tích hợp tự nhiên với các hệ thống tác vụ theo lịch để tự động hóa hoàn toàn:

**Windows Task Scheduler:**

```powershell
# Lưu dưới dạng C:\Scripts\nightly-snapshot.ps1
Import-Module PSVergeOS
Connect-VergeOS -Server "vergeos.local" -Token $env:VERGEOS_TOKEN -SkipCertificateCheck
Get-VergeVM -Name "Prod-*" | ForEach-Object {
    New-VergeVMSnapshot -VMName $_.Name -Name "Nightly-$(Get-Date -Format 'yyyyMMdd')" -Retention 86400
}
Disconnect-VergeOS
```

**cron Linux (PowerShell 7.4+):**

```bash
# Chạy hàng đêm lúc 2:00 sáng
0 2 * * * /usr/bin/pwsh -File /opt/scripts/nightly-snapshot.ps1
```

## Các trường hợp sử dụng phổ biến

### Tác vụ VM hàng loạt

Dừng, khởi động, chụp snapshot hoặc di chuyển nhiều VM bằng các one-liner pipeline. Lý tưởng cho các cửa sổ bảo trì.

### Báo cáo hạ tầng

Xuất kiểm kê VM, mức sử dụng tài nguyên và dữ liệu cấu hình sang CSV để kiểm toán và lập kế hoạch dung lượng.

### Tự động hóa mạng

Tạo mạng, cấu hình DHCP, quản lý quy tắc tường lửa và thiết lập tunnel VPN theo lập trình.

### Bảo trì theo lịch

Tích hợp với Task Scheduler hoặc cron để tự động chụp snapshot, dọn dẹp và kiểm tra tuân thủ.

{% hint style="info" %}
**Bạn đang chuyển từ VMware hay Nutanix?**

PSVergeOS sử dụng `Động từ-Danh từ` quy ước chuẩn của PowerShell nên kỹ năng quen tay được chuyển sang — `Get-VM | Stop-VM` trở thành `Get-VergeVM | Stop-VergeVM`. Xác thực hỗ trợ nhắc nhập tương tác, `đối tượng` PSCredential, và token API, nên các mẫu scripting bạn đã dùng cho tự động hóa không tương tác sẽ áp dụng ở đây. Để quản lý nhiều hơn một hệ thống VergeOS từ một phiên duy nhất, hãy truyền `-Server` trên mỗi cmdlet để nhắm tới một kết nối cụ thể.
{% endhint %}

## Tài nguyên bổ sung

* [Kho lưu trữ GitHub](https://github.com/verge-io/PSVergeOS) — Mã nguồn, vấn đề và 16 script ví dụ
* [PowerShell Gallery](https://www.powershellgallery.com/packages/PSVergeOS) — Bản phát hành mới nhất và thông tin cài đặt
* [Tài liệu PowerShell 7.4](https://learn.microsoft.com/en-us/powershell/) — Tài liệu tham khảo runtime của PowerShell


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/vi/module-8-nha-phat-trien-and-devops/03-powershell-module.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
