PSMinIO Developer e94cb35c0c Implement enhanced upload cmdlet with FileInfo[] and universal BucketDirectory support
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.
2025-07-11 17:32:27 -04:00
2025-07-10 08:54:55 -04:00

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

# 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 statistics
  • New-MinIOBucket - Create new buckets with region support
  • Remove-MinIOBucket - Delete buckets with safety confirmations
  • Test-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 tracking
  • Get-MinIOObjectContentChunked - Chunked downloads for large files
  • Remove-MinIOObject - Delete objects with confirmation prompts
  • New-MinIOFolder - Create folder structures in buckets

Security & Policy Management

  • Get-MinIOBucketPolicy - Retrieve bucket access policies
  • Set-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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. 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
S
Description
A comprehensive PowerShell module for MinIO object storage operations with enterprise-grade features. Built with custom REST API implementation for optimal PowerShell compatibility and performance.
Readme GPL-3.0 6.5 MiB
Languages
C# 89.5%
PowerShell 10.5%