PowerShell không chỉ là công cụ quản trị hệ thống mạnh mẽ mà còn là vũ khí tối thượng để tìm kiếm file trên Windows. Nếu ?.log”.
- Tự động hóa: Kết hợp với lịch trình (Task Scheduler) để quét file hàng ngày.
- Tốc độ: Khi dùng đúng kỹ thuật (dùng Filter thay Include) và tránh đệ quy không cần thiết.
- Tích hợp: Dễ dàng kết nối với Excel, SQL Server, email (gửi báo cáo kết quả tìm kiếm).
Hạn Chế Cần Biết
- Đường dẫn quá dài (PathTooLong): PowerShell cũng gặp lỗi nếu đường dẫn vượt quá 260 ký tự (trừ khi dùng.NET).
- Hiệu suất với ổ cứng lớn: Quét toàn bộ ổ C: với hàng trăm ngàn file có thể mất vài phút.
- Phân quyền: Có thể gặp lỗi Access Denied nếu không chạy với quyền Administrator.
Ứng Dụng Thực Tế Của Cách Tìm File Bằng PowerShell

Quản Trị Hệ Thống: Tìm Và Dọn Dẹp File Rác
Một script thực tế dùng để tìm file tạm thời (thường có đuôi.tmp) và xóa nếu chúng tồn tại trên 90 ngày.
Get-ChildItem -Path C:WindowsTemp -Recurse -Filter .tmp | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) } | Remove-Item -Verbose -Force
) nhưng chỉ một mẫu, còn -Include có thể chấp nhận nhiều mẫu nhưng chậm hơn.
Get-ChildItem mặc định trả về cả file và thư mục. Dùng -File để chỉ lấy file, giúp tăng tốc và tránh nhầm lẫn.-Filter "ABC" thay vì Where-Object với regex.Lưu Ý Quan Trọng Khi Tìm File Bằng PowerShell

- Chạy với quyền Admin: Khi quét thư mục hệ thống (C:Windows, C:ProgramData) để tránh lỗi Access Denied.
- Cân nhắc Performance: Với ổ cứng HDD, hạn chế đệ quy sâu toàn bộ ổ đĩa. Thay vào đó, xác định chính xác thư mục cần tìm.
- Sử dụng lệnh Measure-Command: Nếu bạn nghi ngờ script chạy chậm, hãy dùng
Measure-Command {Get-ChildItem...}để kiểm tra thời gian thực thi. - Luôn kiểm tra kết quả trước khi xóa: Dùng tham số
-WhatIfkhi kết hợp vớiRemove-Itemđể xem file nào sẽ bị xóa mà không thực sự xóa.
Câu Hỏi Thường Gặp Về Cách Tìm File Bằng PowerShell

Làm thế nào để tìm file theo đuôi mở rộng chính xác?
Sử dụng tham số -Filter hoặc -Include. Ví dụ: Get-ChildItem -Path D: -Recurse -Filter ".xlsx". Lưu ý rằng -Filter không phân biệt hoa thường, nhưng thường đáp ứng tốt nhu cầu.
Cách tìm file có kích thước bằng 0?
Kết hợp Where-Object: Get-ChildItem -Path C: -Recurse -File | Where-Object { $_.Length -eq 0 }. Thêm -ErrorAction SilentlyContinue để tránh lỗi.
Tìm file chứa một chuỗi cụ thể bên trong (ví dụ: “lỗi”)?
Dùng Select-String: Get-ChildItem -Path C:Logs -Recurse -Filter ".log" | Select-String -Pattern "lỗi" -SimpleMatch. Tham số -SimpleMatch giúp tìm chính xác, không phải regex.
Tại sao lệnh của tôi báo lỗi “path too long”?
Windows giới hạn độ dài đường dẫn 260 ký tự. Để vượt qua, D:very_long_path”, “.“, “AllDirectories”). Hoặc kích hoạt chính sách “Enable Win32 long paths” trong Group Policy.
Có thể tìm file và xuất ra file CSV không?
Hoàn toàn được. Chỉ cần thêm | Export-Csv -Path C:result.csv -NoTypeInformation vào cuối lệnh. Ví dụ: Get-ChildItem -Path E: -Recurse -File | Select-Object Name, FullName, Length | Export-Csv -Path E:filelist.csv -NoTypeInformation.
Kết Luận

Cách tìm file bằng PowerShell là một kỹ năng không thể thiếu cho bất kỳ ai làm việc nhiều với dữ liệu trên Windows. Từ các lệnh cơ bản như Get-ChildItem và Where-Object cho đến kỹ thuật nâng cao như tìm kiếm nội dung file hay tự động hóa sao lưu, PowerShell mang đến sự linh hoạt vượt trội so với các công cụ truyền thống.
Bắt đầu bằng việc thực hành những ví dụ trong bài, dần dần bạn sẽ xây dựng được thư viện script của riêng mình, giúp tiết kiệm hàng giờ làm việc mỗi tuần. Hãy luôn nhớ kiểm tra kỹ lưỡng trước khi thực thi các lệnh xóa hoặc di chuyển file, và tận dụng sức mạnh pipeline để kết hợp nhiều tác vụ phức tạp thành một dòng lệnh duy nhất.







