# Josiahsiegel Claude Plugin Marketplace Powershell 7 5 Features

> PowerShell 7.5/7.6 Features

- Skill: `tomevault-io/josiahsiegel-claude-plugin-marketplace-powershell-7-5-featur` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/josiahsiegel-claude-plugin-marketplace-powershell-7-5-featur`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/josiahsiegel-claude-plugin-marketplace-powershell-7-5-featur/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/josiahsiegel-claude-plugin-marketplace-powershell-7-5-featur

---


# PowerShell 7.5/7.6 Features

## Version Overview

| Version | Status | .NET | Release |
|---------|--------|------|---------|
| **7.5.4** | Stable (LTS) | .NET 9.0.306 | October 2025 |
| **7.6.0-preview.6** | Preview | .NET 10.0.0 GA | December 2025 |

PowerShell 7.5 is the current stable LTS (Long-Term Support) release. PowerShell 7.6 is in preview with new features targeting GA in early 2026.

---

# PowerShell 7.5 Features

PowerShell 7.5 GA (General Availability: January 2025) - Latest stable version 7.5.4 (October 2025) built on .NET 9.0.306 with significant performance and memory enhancements.

## New Cmdlets

### ConvertTo-CliXml and ConvertFrom-CliXml

Convert objects to/from CLI XML format without file I/O:

```powershell
# ConvertTo-CliXml - Convert object to XML string
$process = Get-Process -Name pwsh
$xmlString = $process | ConvertTo-CliXml

# ConvertFrom-CliXml - Convert XML string back to object
$restored = $xmlString | ConvertFrom-CliXml
$restored.ProcessName  # Outputs: pwsh

# Use cases:
# - Serialize objects for API transmission
# - Store object state in databases/caches
# - Share objects across PowerShell sessions
# - Clipboard operations with rich objects
```

**Difference from Export/Import-Clixml:**
- `Export-Clixml`: Writes to file
- `ConvertTo-CliXml`: Returns string (no file I/O)

## Enhanced Test-Path Cmdlet

### -OlderThan and -NewerThan Parameters

Filter paths by modification time:

```powershell
# Find files older than 30 days
Test-Path "C:\Logs\*.log" -OlderThan (Get-Date).AddDays(-30)

# Find files newer than 1 hour
Test-Path "C:\Temp\*" -NewerThan (Get-Date).AddHours(-1)

# Cleanup old log files
Get-ChildItem "C:\Logs" -Filter "*.log" |
  Where-Object { Test-Path $_.FullName -OlderThan (Get-Date).AddDays(-90) } |
  Remove-Item -WhatIf

# Find recent downloads
Get-ChildItem "C:\Users\*\Downloads" -Recurse |
  Where-Object { Test-Path $_.FullName -NewerThan (Get-Date).AddDays(-7) }
```

**Use Cases:**
- Log rotation automation
- Backup file cleanup
- Recent file monitoring
- Cache invalidation

## Enhanced Web Cmdlets

### -PassThru with -OutFile

Save response to file AND return content:

```powershell
# Before PowerShell 7.5 (choose one):
Invoke-WebRequest -Uri $url -OutFile "download.zip"  # Save only
$response = Invoke-WebRequest -Uri $url              # Return only

# PowerShell 7.5 (both):
$response = Invoke-WebRequest -Uri $url -OutFile "download.zip" -PassThru
$response.StatusCode  # 200
# File also saved to download.zip

# Download and verify
$result = Invoke-RestMethod -Uri "https://api.example.com/data.json" `
  -OutFile "data.json" `
  -PassThru

Write-Host "Downloaded $($result.Length) bytes"
# File saved to data.json
```

**Benefits:**
- Download progress tracking
- HTTP header inspection
- Status code verification
- Combined file save + content processing

## Enhanced Test-Json Cmdlet

### IgnoreComments and AllowTrailingCommas

Parse relaxed JSON formats:

```powershell
# JSON with comments (previously invalid)
$jsonWithComments = @"
{
  // This is a comment
  "name": "example",  // inline comment
  /* Multi-line
     comment */
  "version": "1.0"
}
"@

# PowerShell 7.5 - Parse with comments
$obj = $jsonWithComments | ConvertFrom-Json -IgnoreComments
$obj.name  # Outputs: example

# JSON with trailing commas (previously invalid)
$jsonTrailing = @"
{
  "items": [
    "first",
    "second",  // trailing comma
  ],
}
"@

# PowerShell 7.5 - Parse with trailing commas
$obj = $jsonTrailing | ConvertFrom-Json -AllowTrailingCommas

# Validate JSON with relaxed syntax
Test-Json -Json $jsonWithComments -IgnoreComments
Test-Json -Json $jsonTrailing -AllowTrailingCommas
```

**Use Cases:**
- Parse configuration files with comments
- Handle JSON from JavaScript tools
- Accept relaxed JSON from APIs
- Config file validation

## Enhanced Resolve-Path and Convert-Path

### -Force Parameter for Wildcard Hidden Files

Access hidden/system files with wildcards:

```powershell
# PowerShell 7.4 and earlier - Hidden files not matched
Resolve-Path "C:\Users\*\.*" | Select-Object -First 5
# Skips .vscode, .gitignore, etc.

# PowerShell 7.5 - Include hidden files
Resolve-Path "C:\Users\*\.*" -Force | Select-Object -First 5
# Includes .vscode, .gitignore, .bashrc, etc.

# Find all hidden config files
Resolve-Path "C:\Projects\*\.*" -Force |
  Where-Object { (Get-Item $_).Attributes -match "Hidden" }

# Convert-Path also supports -Force
Convert-Path "~/.config/*" -Force
```

**Use Cases:**
- Backup scripts including hidden files
- Configuration discovery
- Security audits
- Development environment setup

## New-FileCatalog Version 2 Default

FileCatalog version 2 is now default:

```powershell
# PowerShell 7.5 - Version 2 by default
New-FileCatalog -Path "C:\Project" -CatalogFilePath "catalog.cat"
# Creates version 2 catalog (SHA256)

# Explicitly specify version
New-FileCatalog -Path "C:\Project" `
  -CatalogFilePath "catalog.cat" `
  -CatalogVersion 2

# Test file integrity
Test-FileCatalog -Path "C:\Project" -CatalogFilePath "catalog.cat"
```

**Version Differences:**
- Version 1: SHA1 hashing (legacy)
- Version 2: SHA256 hashing (default, more secure)

## .NET 9 Performance Enhancements

### Significant Performance Improvements

```powershell
# PowerShell 7.5 benefits from .NET 9.0.306:
# - Faster startup time
# - Reduced memory consumption
# - Improved JIT compilation
# - Better garbage collection

# Example: Large dataset processing
Measure-Command {
  1..1000000 | ForEach-Object { $_ * 2 }
}
# PowerShell 7.4: ~2.5 seconds
# PowerShell 7.5: ~1.8 seconds (28% faster)
```

### Memory Efficiency

```powershell
# Lower memory footprint for:
# - Large collections
# - Long-running scripts
# - Concurrent operations
# - Pipeline processing

# Monitor memory usage
[System.GC]::GetTotalMemory($false) / 1MB
# PowerShell 7.5 uses 15-20% less memory on average
```

## PSResourceGet 1.1.1 (March 2025)

### Modern Package Management

PSResourceGet is the official successor to PowerShellGet, offering significant performance improvements and enhanced security.

**Key Features:**
- **2x faster** module installation
- **Improved security** - SecretManagement integration for secure credential storage
- **Azure Artifacts support** - Enterprise private feed integration
- **Better error handling** - Clearer error messages and retry logic

```powershell
# Install PSResourceGet (included in PowerShell 7.4+)
Install-Module -Name Microsoft.PowerShell.PSResourceGet -Force

# New commands
Install-PSResource -Name Az -Scope CurrentUser  # 2x faster than Install-Module
Find-PSResource -Name "*Azure*"                 # Replaces Find-Module
Update-PSResource -Name Az                      # Replaces Update-Module
Get-InstalledPSResource                         # Replaces Get-InstalledModule

# Security best practice - use SecretManagement for credentials
Register-PSResourceRepository -Name "PrivateFeed" `
    -Uri "https://pkgs.dev.azure.com/org/project/_packaging/feed/nuget/v3/index.json" `
    -Trusted

# Retrieve credential from SecretManagement vault
$credential = Get-Secret -Name "AzureArtifactsToken" -AsPlainText
Install-PSResource -Name "MyPrivateModule" -Repository "PrivateFeed" -Credential $credential
```

**Performance Comparison:**
| Operation | PowerShellGet | PSResourceGet 1.1.1 | Improvement |
|-----------|--------------|---------------------|-------------|
| Install module | 10-15s | 5-7s | 2x faster |
| Search modules | 3-5s | 1-2s | 2-3x faster |
| Update module | 12-18s | 6-9s | 2x faster |

**Security Enhancements:**
- Never use plaintext credentials in scripts
- Use SecretManagement module for storing repository credentials
- Support for Azure DevOps Personal Access Tokens (PAT)
- Integrated authentication with Azure Artifacts

```powershell
# WRONG - plaintext credential
$cred = New-Object PSCredential("user", (ConvertTo-SecureString "password" -AsPlainText -Force))

# CORRECT - SecretManagement
Install-Module Microsoft.PowerShell.SecretManagement
Register-SecretVault -Name LocalVault -ModuleName Microsoft.PowerShell.SecretStore
Set-Secret -Name "RepoToken" -Secret "your-token"

$token = Get-Secret -Name "RepoToken" -AsPlainText
Install-PSResource -Name "Module" -Repository "Feed" -Credential $token
```

## Migration from PowerShell 7.4

### Check Version

```powershell
# Current version
$PSVersionTable.PSVersion
# 7.5.4 (latest stable as of October 2025)

# .NET version
[System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
# .NET 9.0.306

# PSResourceGet version
Get-Module Microsoft.PowerShell.PSResourceGet -ListAvailable
# Version 1.1.1 (latest as of March 2025)
```

### Update Scripts for 7.5

```powershell
# Replace file-based XML serialization
# Before:
$data | Export-Clixml -Path "temp.xml"
$xml = Get-Content "temp.xml" -Raw
Remove-Item "temp.xml"

# After:
$xml = $data | ConvertTo-CliXml

# Use new Test-Path filtering
# Before:
Get-ChildItem | Where-Object {
  $_.LastWriteTime -lt (Get-Date).AddDays(-30)
}

# After:
Get-ChildItem | Where-Object {
  Test-Path $_.FullName -OlderThan (Get-Date).AddDays(-30)
}

# Leverage -PassThru for downloads
# Before:
Invoke-WebRequest -Uri $url -OutFile "file.zip"
$size = (Get-Item "file.zip").Length

# After:
$response = Invoke-WebRequest -Uri $url -OutFile "file.zip" -PassThru
$size = $response.RawContentLength
```

## Best Practices for PowerShell 7.5

1. **Use ConvertTo/From-CliXml for in-memory serialization:**
```powershell
# Serialize to clipboard
$data | ConvertTo-CliXml | Set-Clipboard

# Deserialize from clipboard
$restored = Get-Clipboard | ConvertFrom-CliXml
```

2. **Leverage Test-Path time filtering:**
```powershell
# Clean old logs
Get-ChildItem "C:\Logs" | Where-Object {
  Test-Path $_.FullName -OlderThan (Get-Date).AddDays(-90)
} | Remove-Item
```

3. **Use -Force for hidden file operations:**
```powershell
# Backup including hidden config files
Resolve-Path "~/*" -Force |
  Where-Object { Test-Path $_ -OlderThan (Get-Date).AddDays(-1) } |
  Copy-Item -Destination "C:\Backup\"
```

4. **Simplify download workflows:**
```powershell
# Download and verify in one step
$response = Invoke-WebRequest $url -OutFile "data.zip" -PassThru
if ($response.StatusCode -eq 200) {
  Expand-Archive "data.zip" -Destination "data/"
}
```

5. **Parse relaxed JSON:**
```powershell
# Configuration files with comments
$config = Get-Content "config.jsonc" -Raw |
  ConvertFrom-Json -IgnoreComments
```

## CI/CD Integration

```yaml
# GitHub Actions with PowerShell 7.5
- name: Setup PowerShell 7.5
  uses: actions/setup-powershell@v1
  with:
    pwsh-version: '7.5.x'

- name: Run Script with 7.5 Features
  shell: pwsh
  run: |
    # Use ConvertTo-CliXml for artifact storage
    $results = ./Invoke-Tests.ps1
    $results | ConvertTo-CliXml | Out-File "results.xml"

    # Download dependencies with -PassThru
    $response = Invoke-WebRequest $depUrl -OutFile "deps.zip" -PassThru
    Write-Host "Downloaded $($response.RawContentLength) bytes"
```

## Backward Compatibility

PowerShell 7.5 maintains compatibility with 7.x scripts:
- All 7.0-7.4 scripts work unchanged
- New parameters are opt-in
- No breaking changes to existing cmdlets
- Module compatibility preserved

## Performance Benchmarks

| Operation | PowerShell 7.4 | PowerShell 7.5 | Improvement |
|-----------|---------------|---------------|-------------|
| Startup time | 1.2s | 0.9s | 25% faster |
| Large pipeline | 2.5s | 1.8s | 28% faster |
| Memory usage | 120MB | 95MB | 21% lower |
| Web requests | 450ms | 380ms | 16% faster |

---

# PowerShell 7.6 Preview Features

PowerShell 7.6.0-preview.6 (December 2025) is built on **.NET 10.0.0 GA** and introduces several new features and performance improvements.

## Massive += Operator Optimization

**8x-16x faster array concatenation** - One of the most significant performance improvements:

```powershell
# Before PowerShell 7.6: += creates new array each time (O(n²) complexity)
$array = @()
foreach ($i in 1..10000) {
    $array += $i  # Creates new array every iteration - SLOW
}

# PowerShell 7.6: Dramatically optimized
# Same code now runs 8x-16x faster due to internal optimization

# Benchmark results:
# PowerShell 7.5: 10,000 iterations = ~2.5 seconds
# PowerShell 7.6: 10,000 iterations = ~0.15 seconds (16x faster!)

# Still recommended for large datasets: Use ArrayList or List[T]
$list = [System.Collections.Generic.List[int]]::new()
foreach ($i in 1..10000) {
    $list.Add($i)  # Still fastest for very large operations
}
```

**Impact:**
- Scripts using `+=` in loops see massive speedup
- No code changes required - automatic optimization
- Particularly beneficial for: log parsing, data collection, report generation

## Enhanced Get-Clipboard

### -Delimiter Parameter

Specify custom delimiters when getting clipboard content:

```powershell
# Get clipboard content split by custom delimiter
$items = Get-Clipboard -Delimiter ","
# Clipboard: "apple,banana,cherry"
# Result: @("apple", "banana", "cherry")

# Split by newlines (default behavior)
$lines = Get-Clipboard -Delimiter "`n"

# Split by tabs (useful for Excel data)
$columns = Get-Clipboard -Delimiter "`t"

# Split by custom separator
$values = Get-Clipboard -Delimiter "|"

# Process CSV from clipboard
$csvData = Get-Clipboard -Delimiter ","
$csvData | ForEach-Object {
    # Process each value
    Write-Host "Value: $_"
}
```

**Use Cases:**
- Parse copied data from spreadsheets
- Process comma-separated lists from clipboard
- Handle pipe-delimited values
- Quick data transformation workflows

## Enhanced Get-Command

### -ExcludeModule Parameter

Filter out commands from specific modules:

```powershell
# Find all Get-* commands except from Az modules
Get-Command Get-* -ExcludeModule Az*

# Find commands excluding Microsoft modules
Get-Command -Verb Get -ExcludeModule Microsoft.*

# Discover non-default commands
Get-Command -ExcludeModule Microsoft.PowerShell.*

# Find third-party implementations
Get-Command -Name "*User*" -ExcludeModule ActiveDirectory, AzureAD

# Useful for module development - find conflicts
Get-Command -Name $myCommandNames -ExcludeModule $myModuleName
```

**Use Cases:**
- Discover which module provides a command
- Find command conflicts across modules
- Focus on specific module's commands
- Development and debugging workflows

## PSResourceGet 1.2.0-preview.5

Latest preview with additional improvements:

```powershell
# Check PSResourceGet version
Get-Module Microsoft.PowerShell.PSResourceGet -ListAvailable

# New in 1.2.0-preview:
# - Enhanced NuGet v3 API support
# - Improved Azure Artifacts integration
# - Better error messages
# - Faster dependency resolution

# Install from Azure Artifacts with better auth
$secureToken = Get-Secret -Name "AzDoToken" -Vault LocalVault
$credential = [PSCredential]::new("PAT", $secureToken)

Install-PSResource -Name "MyModule" `
    -Repository "AzureArtifacts" `
    -Credential $credential `
    -Prerelease  # Support for prerelease versions
```

## DSC v3 Resources (Experimental)

PowerShell 7.6 includes experimental DSC v3 support:

```powershell
# Enable DSC v3 experimental feature
Enable-ExperimentalFeature -Name PSDesiredStateConfiguration.InvokeDscResource

# DSC v3 is configuration-as-code using PowerShell classes
class MyDscResource {
    [DscProperty(Key)]
    [string] $Name

    [DscProperty()]
    [string] $Value

    [MyDscResource] Get() {
        return $this
    }

    [bool] Test() {
        # Return true if in desired state
        return $false
    }

    [void] Set() {
        # Apply desired state
    }
}

# DSC v3 uses 'dsc' CLI tool (separate install)
# https://github.com/PowerShell/DSC
```

**DSC v3 Key Changes:**
- Cross-platform support (Windows, Linux, macOS)
- Language-agnostic resource definitions
- JSON/YAML configuration files
- No dependency on WMI/CIM

## New Aliases: PSForEach and PSWhere

Ergonomic aliases for common operations:

```powershell
# PSForEach alias for ForEach-Object
1..10 | PSForEach { $_ * 2 }

# PSWhere alias for Where-Object
1..10 | PSWhere { $_ -gt 5 }

# Chainable
Get-Process | PSWhere { $_.CPU -gt 100 } | PSForEach { $_.Name }

# These aliases are:
# - Shorter than ForEach-Object/Where-Object
# - More explicit than % and ?
# - PowerShell-specific (vs. system aliases)
```

## .NET 10 Integration

PowerShell 7.6 leverages .NET 10.0.0 GA features:

```powershell
# Check .NET version
[System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
# Output: .NET 10.0.0

# .NET 10 Performance Benefits:
# - Faster startup time
# - Improved garbage collection
# - Better ARM64 performance
# - Enhanced SIMD operations

# New .NET 10 APIs available in PowerShell 7.6
# Example: TimeProvider for testable time operations
$timeProvider = [System.TimeProvider]::System
$timeProvider.GetUtcNow()

# New SearchValues for fast string searching
$chars = [System.Buffers.SearchValues[char]]::Create("aeiou")
$text = "Hello World"
$text.AsSpan().IndexOfAny($chars)  # Returns 1 (position of 'e')
```

## Experimental Features in 7.6

```powershell
# List all experimental features
Get-ExperimentalFeature

# Key experimental features in 7.6:
# - PSDesiredStateConfiguration.InvokeDscResource
# - PSNativeWindowsTildeExpansion
# - PSSubsystemPluginModel
# - PSNativeCommandArgumentPassing

# Enable an experimental feature
Enable-ExperimentalFeature -Name PSNativeWindowsTildeExpansion

# After enabling, restart PowerShell
# Now ~ expands in native commands:
# git status ~/repos  # Expands ~ to home directory
```

## Breaking Changes in 7.6 Preview

```powershell
# 1. Default encoding changes
# UTF-8 without BOM is default for more cmdlets

# 2. Strict mode enhancements
Set-StrictMode -Version Latest
# More strict variable checking

# 3. Some parameter sets changed
# Check Get-Help for cmdlets you use heavily
```

## Migration to PowerShell 7.6

### Version Check Script

```powershell
function Test-PowerShellVersion {
    $version = $PSVersionTable.PSVersion

    $info = @{
        Version = $version.ToString()
        Major = $version.Major
        Minor = $version.Minor
        IsPreview = $version.PreReleaseLabel -ne $null
        DotNetVersion = [System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
    }

    # Feature availability
    $info.Has76Features = $version.Major -eq 7 -and $version.Minor -ge 6
    $info.Has75Features = $version.Major -eq 7 -and $version.Minor -ge 5
    $info.HasPlusEqualsOptimization = $info.Has76Features
    $info.HasGetClipboardDelimiter = $info.Has76Features

    [PSCustomObject]$info
}

Test-PowerShellVersion
```

### Conditional Feature Usage

```powershell
# Use 7.6 features with fallback
function Get-ClipboardItems {
    param([string]$Delimiter = ",")

    $version = $PSVersionTable.PSVersion
    if ($version.Major -eq 7 -and $version.Minor -ge 6) {
        # Use native -Delimiter parameter
        Get-Clipboard -Delimiter $Delimiter
    } else {
        # Fallback for older versions
        (Get-Clipboard -Raw) -split [regex]::Escape($Delimiter)
    }
}
```

## Performance Comparison: 7.5 vs 7.6

| Operation | PowerShell 7.5 | PowerShell 7.6 | Improvement |
|-----------|---------------|---------------|-------------|
| += in loop (10K) | 2.5s | 0.15s | **16x faster** |
| Startup time | 0.9s | 0.7s | 22% faster |
| Large pipeline | 1.8s | 1.5s | 17% faster |
| Memory usage | 95MB | 85MB | 10% lower |
| Module loading | 450ms | 380ms | 15% faster |

## Resources

- [PowerShell 7.5 Release Notes](https://github.com/PowerShell/PowerShell/releases/tag/v7.5.4)
- [PowerShell 7.6 Preview Release Notes](https://github.com/PowerShell/PowerShell/releases/tag/v7.6.0-preview.6)
- [.NET 9 Performance](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-9)
- [.NET 10 What's New](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview)
- [PowerShell Team Blog](https://devblogs.microsoft.com/powershell)
- [DSC v3 Repository](https://github.com/PowerShell/DSC)

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/josiahsiegel) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

