| Version | Status | .NET | Release |
Scanned 9/2/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry --skill powershell-7-5-features-josiahsiegel-claude-plugin-market --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Powershell 7 5 Features Josiahsiegel Claude Plugin Market?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-powershell-7-5-features-josiahsiegel-claude-plugin-claude-skill-registry)More formats (shields.io, HTML) on the badges page.
---
name: powershell-7-5-features
description: '| Version | Status | .NET | Release |'
---
---
name: powershell-7.5-features
description: PowerShell 7.5/7.6 features and enhancements. PROACTIVELY activate for: (1) PowerShell 7.5 stable features, (2) PowerShell 7.6 preview features, (3) ConvertTo-CliXml/ConvertFrom-CliXml, (4) Test-Path -OlderThan/-NewerThan, (5) += operator optimization (8x-16x faster), (6) PSResourceGet 1.1.1/1.2.0, (7) Get-Clipboard -Delimiter, (8) Get-Command -ExcludeModule, (9) DSC v3 resources, (10) .NET 9/.NET 10 integration. Provides: Latest cmdlet usage, performance benchmarks, migration patterns.
---
# 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)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!