mirror of
https://github.com/Grace-Solutions/PSMinIO.git
synced 2026-07-26 14:58:13 +00:00
e94cb35c0c3ea2ea301324861604d6b739413412
Enhanced New-MinIOObject cmdlet with advanced parameter sets: Files parameter set: Support for FileInfo[] (single or multiple files) Directory parameter set: DirectoryInfo with recursive options Removed redundant SingleFile parameter set (FileInfo[] handles both cases) Universal BucketDirectory support: Available for both Files and Directory parameter sets Handles paths like '/Folder1/Folder2/Folder3' or 'Folder1\\Folder2\\Folder3' Automatic multilevel bucket directory creation Enhanced path sanitization with proper forward slash formatting Advanced directory upload features: Recursive parameter with MaxDepth control Flatten parameter to upload all files to bucket root InclusionFilter and ExclusionFilter ScriptBlock parameters Force parameter for overwriting existing objects Comprehensive file collection processing: Multi-file upload with progress tracking Automatic object name inference from filenames Directory structure preservation or flattening Error handling for individual file failures PassThru parameter for returning upload results Enhanced path processing: Cross-platform path handling (Windows/Unix) Automatic directory structure creation in buckets Verbose logging for directory operations Non-critical error handling for directory creation Architecture: Built on custom REST API with thread-safe operations and comprehensive error handling.
PSMinIO
A comprehensive PowerShell module for MinIO object storage operations, built on the official Minio .NET SDK. Provides full-featured object storage management with enterprise-grade capabilities.
Features
- 🚀 High Performance: Built for .NET Standard 2.0, compatible with PowerShell 5.1+ and PowerShell 7+
- 📦 Complete Object Management: Upload, download, list, and delete objects with advanced filtering and sorting
- 🗂️ Flexible Directory Support: Create nested folder structures with automatic directory creation
- ⚡ Chunked Operations: Large file uploads and downloads with resume capability and progress tracking
- 🔒 Security & Policy Management: Comprehensive bucket policy and access control management
- 📊 Advanced Object Listing: Filter by prefix, sort by multiple criteria, limit results, and exclude directories
- ⏱️ Timing & Performance Metrics: Detailed timing information and transfer speed reporting
- 🔄 Progress Reporting: Multi-layer progress tracking for file collections and chunked operations
- 📝 Professional Logging: Clean, timestamped logging with configurable verbosity levels
- 🛡️ Robust Error Handling: Graceful handling of network issues and edge cases
Installation
From PowerShell Gallery
# Install from PowerShell Gallery
Install-Module -Name PSMinIO -Scope CurrentUser
# Import the module
Import-Module PSMinIO
From Source
# Clone the repository
git clone https://github.com/Grace-Solutions/PSMinIO.git
cd PSMinIO
# Build the module (automatically updates version)
.\scripts\Build.ps1
# Import the module
Import-Module .\Module\PSMinIO\PSMinIO.psd1
Direct Import
# Import from local path
Import-Module .\Module\PSMinIO\PSMinIO.psd1
Quick Start
# Connect to MinIO server
$connection = Connect-MinIO -Endpoint "https://minio.example.com" -AccessKey "your-access-key" -SecretKey "your-secret-key"
# Create a bucket
New-MinIOBucket -BucketName 'my-data-bucket' -Verbose
# Upload files with automatic directory creation
New-MinIOObject -BucketName 'my-data-bucket' -Files "document.pdf" -BucketDirectory "documents/2025/january"
# List objects with advanced filtering
Get-MinIOObject -BucketName 'my-data-bucket' -Prefix "documents/" -SortBy "Size" -Descending -MaxObjects 10
# Download with timing information
Get-MinIOObjectContent -BucketName 'my-data-bucket' -ObjectName 'documents/2025/january/document.pdf' -FilePath 'C:\Downloads\document.pdf'
# Chunked upload for large files
New-MinIOObjectChunked -BucketName 'my-data-bucket' -Files "large-video.mp4" -ChunkSize 10MB -BucketDirectory "media/videos"
Available Cmdlets
Connection Management
Connect-MinIO- Establish connection to MinIO server with SSL support and certificate validation options
Bucket Operations
Get-MinIOBucket- List all buckets with optional statisticsNew-MinIOBucket- Create new buckets with region supportRemove-MinIOBucket- Delete buckets with safety confirmationsTest-MinIOBucketExists- Check bucket existence
Object Operations
Get-MinIOObject- Advanced object listing with filtering, sorting, and pagination- Filter by prefix or exact object name
- Sort by Name, Size, LastModified, or ETag (ascending/descending)
- Limit results with MaxObjects
- Exclude directories with ObjectsOnly
New-MinIOObject- Upload files with directory support- Single file or multiple file uploads
- Automatic nested directory creation
- Progress tracking and timing information
New-MinIOObjectChunked- Chunked uploads for large files- Configurable chunk sizes (1MB minimum)
- Resume capability and multi-layer progress tracking
- Automatic directory creation
Get-MinIOObjectContent- Download objects with progress trackingGet-MinIOObjectContentChunked- Chunked downloads for large filesRemove-MinIOObject- Delete objects with confirmation promptsNew-MinIOFolder- Create folder structures in buckets
Security & Policy Management
Get-MinIOBucketPolicy- Retrieve bucket access policiesSet-MinIOBucketPolicy- Configure bucket access policies
Monitoring & Statistics
Get-MinIOStats- Comprehensive server and bucket statistics with object counting limits
Key Features in Detail
🗂️ Advanced Directory Support
- Nested Folder Creation: Automatically create multi-level directory structures (e.g.,
documents/2025/january/reports) - BucketDirectory Parameter: Specify target directories for uploads without manual folder creation
- Clean Directory Handling: Non-critical directory creation attempts with graceful fallback
⚡ Chunked Operations
- Large File Support: Handle files of any size with configurable chunk sizes
- Resume Capability: Interrupted transfers can be resumed (future enhancement)
- Multi-Layer Progress: Track collection progress, file progress, and chunk progress simultaneously
- Performance Optimization: Optimal chunk sizes for different network conditions
📊 Enhanced Object Listing
# Advanced filtering and sorting examples
Get-MinIOObject -BucketName "data" -Prefix "logs/" -SortBy "LastModified" -Descending -MaxObjects 50
Get-MinIOObject -BucketName "media" -ObjectsOnly -SortBy "Size" -Descending
Get-MinIOObject -BucketName "docs" -ObjectName "specific-file.pdf"
⏱️ Performance Metrics
All operations provide detailed timing information:
- Duration: Precise operation timing
- Transfer Speed: Formatted speed reporting (B/s, KB/s, MB/s, GB/s, TB/s)
- Progress Tracking: Real-time progress updates during transfers
Examples
See the scripts/examples directory for comprehensive usage examples:
- Basic Operations: Connection, bucket management, simple uploads/downloads
- Advanced Scenarios: Chunked transfers, directory management, bulk operations
- Enterprise Patterns: Policy management, monitoring, and automation scripts
Requirements
- PowerShell: 5.1+ or PowerShell 7+
- .NET Framework: 4.7.2+ (for PowerShell 5.1) or .NET Core/.NET 5+ (for PowerShell 7+)
- MinIO Server: Compatible with MinIO and Amazon S3 APIs
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Support
- 📖 Documentation: See docs/USAGE.md for detailed usage instructions
- 🐛 Issues: Report bugs and request features via GitHub Issues
- 💬 Discussions: Join the community discussions for questions and tips
Languages
C#
89.5%
PowerShell
10.5%