diff --git a/README.md b/README.md
index 2447258..fa2fb0d 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,32 @@ Get-ChildItem | Format-List
Get-ChildItem | Format-Wide
```
+## PowerShell Remoting Support
+
+Terminal-Icons now supports displaying icons for file and folder objects returned from remote PowerShell sessions. When you use `Invoke-Command` or `Enter-PSSession` to retrieve directory listings from remote machines, the objects are automatically deserialized during transmission. Terminal-Icons handles these deserialized objects seamlessly.
+
+### Examples
+
+Display files from a remote server:
+```powershell
+Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ChildItem C:\Logs }
+```
+
+Use with Format-TerminalIcons directly:
+```powershell
+Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ChildItem } | Format-TerminalIcons
+```
+
+Interactive remote session:
+```powershell
+Enter-PSSession -ComputerName Server01
+Get-ChildItem # Icons will display automatically
+```
+
+### How It Works
+
+PowerShell remoting serializes objects when sending them across the network. FileSystemInfo objects (DirectoryInfo and FileInfo) become `Deserialized.System.IO.DirectoryInfo` and `Deserialized.System.IO.FileInfo` objects. Terminal-Icons automatically detects and handles these deserialized objects, ensuring icons display correctly regardless of whether the files are local or remote.
+
## Commands
| Command | Description
diff --git a/Terminal-Icons/Data/colorThemes/devblackops.psd1 b/Terminal-Icons/Data/colorThemes/devblackops.psd1
index 143ea67..9390370 100644
--- a/Terminal-Icons/Data/colorThemes/devblackops.psd1
+++ b/Terminal-Icons/Data/colorThemes/devblackops.psd1
@@ -2,6 +2,7 @@
Name = 'devblackops'
Types = @{
Directories = @{
+ '' = '4682B4' # Default directory color (steel blue)
symlink = '7373ff'
junction = '7373ff'
WellKnown = @{
@@ -53,6 +54,7 @@
}
}
Files = @{
+ '' = 'D3D3D3' # Default file color (light gray)
symlink = '7373ff'
junction = '7373ff'
WellKnown = @{
diff --git a/Terminal-Icons/Private/ConvertTo-ColorSequence.ps1 b/Terminal-Icons/Private/ConvertTo-ColorSequence.ps1
index 520b05d..ad130ee 100644
--- a/Terminal-Icons/Private/ConvertTo-ColorSequence.ps1
+++ b/Terminal-Icons/Private/ConvertTo-ColorSequence.ps1
@@ -16,9 +16,17 @@ function ConvertTo-ColorSequence {
if ($ColorData.Types.Directories['junction']) {
$cs.Types.Directories['junction'] = ConvertFrom-RGBColor -RGB $ColorData.Types.Directories['junction']
}
+ # Process WellKnown directory names
$ColorData.Types.Directories.WellKnown.GetEnumerator().ForEach({
$cs.Types.Directories[$_.Name] = ConvertFrom-RGBColor -RGB $_.Value
})
+ # Process default directory color if present
+ if ($ColorData.Types.Directories.ContainsKey('') -and $ColorData.Types.Directories['']) {
+ $defaultColor = $ColorData.Types.Directories['']
+ if ($defaultColor -is [string] -and $defaultColor -match '^[0-9A-Fa-f]{6}$') {
+ $cs.Types.Directories[''] = ConvertFrom-RGBColor -RGB $defaultColor
+ }
+ }
# Wellknown files
if ($ColorData.Types.Files['symlink']) {
@@ -35,6 +43,13 @@ function ConvertTo-ColorSequence {
$ColorData.Types.Files.GetEnumerator().Where({$_.Name -ne 'WellKnown' -and $_.Name -ne ''}).ForEach({
$cs.Types.Files[$_.Name] = ConvertFrom-RGBColor -RGB $_.Value
})
+ # Process default file color if present
+ if ($ColorData.Types.Files.ContainsKey('') -and $ColorData.Types.Files['']) {
+ $defaultColor = $ColorData.Types.Files['']
+ if ($defaultColor -is [string] -and $defaultColor -match '^[0-9A-Fa-f]{6}$') {
+ $cs.Types.Files[''] = ConvertFrom-RGBColor -RGB $defaultColor
+ }
+ }
$cs
}
diff --git a/Terminal-Icons/Private/Resolve-Icon.ps1 b/Terminal-Icons/Private/Resolve-Icon.ps1
index 3c2c071..45ed325 100644
--- a/Terminal-Icons/Private/Resolve-Icon.ps1
+++ b/Terminal-Icons/Private/Resolve-Icon.ps1
@@ -3,7 +3,16 @@ function Resolve-Icon {
[CmdletBinding()]
param(
[Parameter(Mandatory, ValueFromPipeline)]
- [IO.FileSystemInfo]$FileInfo,
+ [ValidateScript({
+ # Accept both local FileSystemInfo objects and deserialized objects from remoting
+ if ($_ -is [IO.FileSystemInfo]) {
+ return $true
+ }
+ # Check TypeNames array for deserialized objects
+ $matches = $_.PSObject.TypeNames -match '^Deserialized\.System\.IO\.(DirectoryInfo|FileInfo)$'
+ return ($null -ne $matches -and $matches.Count -gt 0)
+ })]
+ [PSObject]$FileInfo,
[string]$IconTheme = $script:userThemeData.CurrentIconTheme,
@@ -22,13 +31,40 @@ function Resolve-Icon {
Target = ''
}
- if ($FileInfo.PSIsContainer) {
+ # Safe property access for both local and deserialized objects
+ $isContainer = if ($FileInfo.PSObject.Properties['PSIsContainer']) {
+ $FileInfo.PSIsContainer
+ } else {
+ $false
+ }
+ $linkType = if ($FileInfo.PSObject.Properties['LinkType']) {
+ $FileInfo.LinkType
+ } else {
+ $null
+ }
+ $target = if ($FileInfo.PSObject.Properties['Target']) {
+ $FileInfo.Target
+ } else {
+ $null
+ }
+ $name = if ($FileInfo.PSObject.Properties['Name']) {
+ $FileInfo.Name
+ } else {
+ ''
+ }
+ $extension = if ($FileInfo.PSObject.Properties['Extension']) {
+ $FileInfo.Extension
+ } else {
+ ''
+ }
+
+ if ($isContainer) {
$type = 'Directories'
} else {
$type = 'Files'
}
- switch ($FileInfo.LinkType) {
+ switch ($linkType) {
# Determine symlink or junction icon and color
'Junction' {
if ($icons) {
@@ -41,7 +77,9 @@ function Resolve-Icon {
} else {
$colorSet = $script:colorReset
}
- $displayInfo['Target'] = ' ' + $glyphs['nf-md-arrow_right_thick'] + ' ' + $FileInfo.Target
+ if ($target) {
+ $displayInfo['Target'] = ' ' + $glyphs['nf-md-arrow_right_thick'] + ' ' + $target
+ }
break
}
'SymbolicLink' {
@@ -55,23 +93,25 @@ function Resolve-Icon {
} else {
$colorSet = $script:colorReset
}
- $displayInfo['Target'] = ' ' + $glyphs['nf-md-arrow_right_thick'] + ' ' + $FileInfo.Target
+ if ($target) {
+ $displayInfo['Target'] = ' ' + $glyphs['nf-md-arrow_right_thick'] + ' ' + $target
+ }
break
} default {
if ($icons) {
# Determine normal directory icon and color
- $iconName = $icons.Types.$type.WellKnown[$FileInfo.Name]
+ $iconName = $icons.Types.$type.WellKnown[$name]
if (-not $iconName) {
- if ($FileInfo.PSIsContainer) {
- $iconName = $icons.Types.$type[$FileInfo.Name]
- } elseif ($icons.Types.$type.ContainsKey($FileInfo.Extension)) {
- $iconName = $icons.Types.$type[$FileInfo.Extension]
+ if ($isContainer) {
+ $iconName = $icons.Types.$type[$name]
+ } elseif ($icons.Types.$type.ContainsKey($extension)) {
+ $iconName = $icons.Types.$type[$extension]
} else {
# File probably has multiple extensions
# Fallback to computing the full extension
- $firstDot = $FileInfo.Name.IndexOf('.')
+ $firstDot = $name.IndexOf('.')
if ($firstDot -ne -1) {
- $fullExtension = $FileInfo.Name.Substring($firstDot)
+ $fullExtension = $name.Substring($firstDot)
$iconName = $icons.Types.$type[$fullExtension]
}
}
@@ -81,7 +121,7 @@ function Resolve-Icon {
# Fallback if everything has gone horribly wrong
if (-not $iconName) {
- if ($FileInfo.PSIsContainer) {
+ if ($isContainer) {
$iconName = 'nf-oct-file_directory'
} else {
$iconName = 'nf-fa-file'
@@ -92,18 +132,18 @@ function Resolve-Icon {
$iconName = $null
}
if ($colors) {
- $colorSeq = $colors.Types.$type.WellKnown[$FileInfo.Name]
+ $colorSeq = $colors.Types.$type.WellKnown[$name]
if (-not $colorSeq) {
- if ($FileInfo.PSIsContainer) {
- $colorSeq = $colors.Types.$type[$FileInfo.Name]
- } elseif ($colors.Types.$type.ContainsKey($FileInfo.Extension)) {
- $colorSeq = $colors.Types.$type[$FileInfo.Extension]
+ if ($isContainer) {
+ $colorSeq = $colors.Types.$type[$name]
+ } elseif ($colors.Types.$type.ContainsKey($extension)) {
+ $colorSeq = $colors.Types.$type[$extension]
} else {
# File probably has multiple extensions
# Fallback to computing the full extension
- $firstDot = $FileInfo.Name.IndexOf('.')
+ $firstDot = $name.IndexOf('.')
if ($firstDot -ne -1) {
- $fullExtension = $FileInfo.Name.Substring($firstDot)
+ $fullExtension = $name.Substring($firstDot)
$colorSeq = $colors.Types.$type[$fullExtension]
}
}
@@ -111,13 +151,24 @@ function Resolve-Icon {
$colorSeq = $colors.Types.$type['']
}
- # Fallback if everything has gone horribly wrong
+ # Final fallback: use hardcoded default colors
if (-not $colorSeq) {
- $colorSeq = $script:colorReset
+ if ($isContainer) {
+ # Default directory color: steel blue
+ $colorSeq = "${script:escape}[38;2;70;130;180m"
+ } else {
+ # Default file color: light gray
+ $colorSeq = "${script:escape}[38;2;211;211;211m"
+ }
}
}
} else {
- $colorSeq = $script:colorReset
+ # No theme colors available: use default colors
+ if ($isContainer) {
+ $colorSeq = "${script:escape}[38;2;70;130;180m"
+ } else {
+ $colorSeq = "${script:escape}[38;2;211;211;211m"
+ }
}
}
}
diff --git a/Terminal-Icons/Private/Test-DeserializedFileSystemInfo.ps1 b/Terminal-Icons/Private/Test-DeserializedFileSystemInfo.ps1
new file mode 100644
index 0000000..b3ba0ad
--- /dev/null
+++ b/Terminal-Icons/Private/Test-DeserializedFileSystemInfo.ps1
@@ -0,0 +1,32 @@
+function Test-DeserializedFileSystemInfo {
+ <#
+ .SYNOPSIS
+ Tests if an object is a deserialized FileSystemInfo object from PowerShell remoting.
+ .DESCRIPTION
+ When FileSystemInfo objects (DirectoryInfo/FileInfo) are passed through PowerShell remoting,
+ they are deserialized and their type names are prefixed with "Deserialized.".
+ This function detects such objects to enable special handling.
+ .PARAMETER InputObject
+ The object to test for deserialization.
+ .OUTPUTS
+ System.Boolean
+ Returns $true if the object is a deserialized FileSystemInfo object, $false otherwise.
+ .EXAMPLE
+ Test-DeserializedFileSystemInfo $fileObject
+ Returns $true if $fileObject came from a remote session.
+ #>
+ [OutputType([bool])]
+ [CmdletBinding()]
+ param(
+ [Parameter(Mandatory, ValueFromPipeline)]
+ [PSObject]$InputObject
+ )
+
+ process {
+ $typeNames = $InputObject.PSObject.TypeNames
+ # -match on an array returns matching items, not a boolean
+ # We need to explicitly check and return a boolean
+ $matches = $typeNames -match '^Deserialized\.System\.IO\.(DirectoryInfo|FileInfo)$'
+ return ($null -ne $matches -and $matches.Count -gt 0)
+ }
+}
diff --git a/Terminal-Icons/Public/Format-TerminalIcons.ps1 b/Terminal-Icons/Public/Format-TerminalIcons.ps1
index 058b1da..17d4332 100644
--- a/Terminal-Icons/Public/Format-TerminalIcons.ps1
+++ b/Terminal-Icons/Public/Format-TerminalIcons.ps1
@@ -17,7 +17,8 @@ function Format-TerminalIcons {
.INPUTS
System.IO.FileSystemInfo
- You can pipe an objects that derive from System.IO.FileSystemInfo (System.IO.DIrectoryInfo and System.IO.FileInfo) to 'Format-TerminalIcons'.
+ You can pipe objects that derive from System.IO.FileSystemInfo (System.IO.DirectoryInfo and System.IO.FileInfo) to 'Format-TerminalIcons'.
+ Also supports deserialized FileSystemInfo objects from PowerShell remoting sessions.
.OUTPUTS
System.String
@@ -28,7 +29,16 @@ function Format-TerminalIcons {
[CmdletBinding()]
param(
[Parameter(Mandatory, ValueFromPipeline)]
- [IO.FileSystemInfo]$FileInfo
+ [ValidateScript({
+ # Accept both local FileSystemInfo objects and deserialized objects from remoting
+ if ($_ -is [IO.FileSystemInfo]) {
+ return $true
+ }
+ # Check TypeNames array for deserialized objects
+ $matches = $_.PSObject.TypeNames -match '^Deserialized\.System\.IO\.(DirectoryInfo|FileInfo)$'
+ return ($null -ne $matches -and $matches.Count -gt 0)
+ })]
+ [PSObject]$FileInfo
)
process {
diff --git a/Terminal-Icons/Terminal-Icons.format.ps1xml b/Terminal-Icons/Terminal-Icons.format.ps1xml
index b8cf63a..6de0331 100644
--- a/Terminal-Icons/Terminal-Icons.format.ps1xml
+++ b/Terminal-Icons/Terminal-Icons.format.ps1xml
@@ -9,6 +9,8 @@ https://github.com/DHowett/DirColors -->
System.IO.DirectoryInfo
System.IO.FileInfo
+ Deserialized.System.IO.DirectoryInfo
+ Deserialized.System.IO.FileInfo
diff --git a/docs/en-US/Add-TerminalIconsColorTheme.md b/docs/en-US/Add-TerminalIconsColorTheme.md
index 4c36d88..f069e3d 100644
--- a/docs/en-US/Add-TerminalIconsColorTheme.md
+++ b/docs/en-US/Add-TerminalIconsColorTheme.md
@@ -14,12 +14,14 @@ Add a Terminal-Icons color theme for the current user.
### Path (Default)
```
-Add-TerminalIconsColorTheme [-Path] [-Force] [-WhatIf] [-Confirm] []
+Add-TerminalIconsColorTheme [-Path] [-Force] [-ProgressAction ] [-WhatIf]
+ [-Confirm] []
```
### LiteralPath
```
-Add-TerminalIconsColorTheme [-LiteralPath] [-Force] [-WhatIf] [-Confirm] []
+Add-TerminalIconsColorTheme [-LiteralPath] [-Force] [-ProgressAction ] [-WhatIf]
+ [-Confirm] []
```
## DESCRIPTION
@@ -122,6 +124,21 @@ Accept pipeline input: False
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Add-TerminalIconsIconTheme.md b/docs/en-US/Add-TerminalIconsIconTheme.md
index 47b8d38..1e6db1b 100644
--- a/docs/en-US/Add-TerminalIconsIconTheme.md
+++ b/docs/en-US/Add-TerminalIconsIconTheme.md
@@ -14,12 +14,14 @@ Add a Terminal-Icons icon theme for the current user.
### Path (Default)
```
-Add-TerminalIconsIconTheme [-Path] [-Force] [-WhatIf] [-Confirm] []
+Add-TerminalIconsIconTheme [-Path] [-Force] [-ProgressAction ] [-WhatIf]
+ [-Confirm] []
```
### LiteralPath
```
-Add-TerminalIconsIconTheme [-LiteralPath] [-Force] [-WhatIf] [-Confirm] []
+Add-TerminalIconsIconTheme [-LiteralPath] [-Force] [-ProgressAction ] [-WhatIf]
+ [-Confirm] []
```
## DESCRIPTION
@@ -122,6 +124,21 @@ Accept pipeline input: False
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Format-TerminalIcons.md b/docs/en-US/Format-TerminalIcons.md
index 3d66f98..f5c4035 100644
--- a/docs/en-US/Format-TerminalIcons.md
+++ b/docs/en-US/Format-TerminalIcons.md
@@ -13,7 +13,7 @@ Prepend a custom icon (with color) to the provided file or folder object when di
## SYNTAX
```
-Format-TerminalIcons [-FileInfo] []
+Format-TerminalIcons [-FileInfo] [-ProgressAction ] []
```
## DESCRIPTION
@@ -42,7 +42,7 @@ Get a file object and pass directly to Format-TerminalIcons.
The file or folder to display
```yaml
-Type: FileSystemInfo
+Type: PSObject
Parameter Sets: (All)
Aliases:
@@ -53,6 +53,21 @@ Accept pipeline input: True (ByValue)
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Get-TerminalIconsGlyphs.md b/docs/en-US/Get-TerminalIconsGlyphs.md
index b18e471..7099cc5 100644
--- a/docs/en-US/Get-TerminalIconsGlyphs.md
+++ b/docs/en-US/Get-TerminalIconsGlyphs.md
@@ -13,7 +13,7 @@ Gets the list of glyphs known to Terminal-Icons.
## SYNTAX
```
-Get-TerminalIconsGlyphs []
+Get-TerminalIconsGlyphs [-ProgressAction ] []
```
## DESCRIPTION
@@ -31,6 +31,21 @@ Gets the table of glyph names and icons.
## PARAMETERS
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Get-TerminalIconsTheme.md b/docs/en-US/Get-TerminalIconsTheme.md
index 72206ba..c5357be 100644
--- a/docs/en-US/Get-TerminalIconsTheme.md
+++ b/docs/en-US/Get-TerminalIconsTheme.md
@@ -13,7 +13,7 @@ Get the currently applied color and icon theme.
## SYNTAX
```
-Get-TerminalIconsTheme []
+Get-TerminalIconsTheme [-ProgressAction ] []
```
## DESCRIPTION
@@ -30,6 +30,21 @@ Get the currently applied Terminal-Icons color and icon theme.
## PARAMETERS
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Invoke-TerminalIconsThemeMigration.md b/docs/en-US/Invoke-TerminalIconsThemeMigration.md
index 7f08970..32d2870 100644
--- a/docs/en-US/Invoke-TerminalIconsThemeMigration.md
+++ b/docs/en-US/Invoke-TerminalIconsThemeMigration.md
@@ -14,12 +14,13 @@ Used to migrate your terminal icon themes to Nerd Fonts v3.
### Path
```
-Invoke-TerminalIconsThemeMigration [-Path] []
+Invoke-TerminalIconsThemeMigration [-Path] [-ProgressAction ] []
```
### LiteralPath
```
-Invoke-TerminalIconsThemeMigration [-LiteralPath] []
+Invoke-TerminalIconsThemeMigration [-LiteralPath] [-ProgressAction ]
+ []
```
## DESCRIPTION
@@ -66,6 +67,21 @@ Accept pipeline input: True (ByPropertyName)
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Remove-TerminalIconsTheme.md b/docs/en-US/Remove-TerminalIconsTheme.md
index 2a0bf97..c5c2505 100644
--- a/docs/en-US/Remove-TerminalIconsTheme.md
+++ b/docs/en-US/Remove-TerminalIconsTheme.md
@@ -13,8 +13,8 @@ Removes a color or icon theme
## SYNTAX
```
-Remove-TerminalIconsTheme [[-IconTheme] ] [[-ColorTheme] ] [-Force] [-WhatIf] [-Confirm]
- []
+Remove-TerminalIconsTheme [[-IconTheme] ] [[-ColorTheme] ] [-Force]
+ [-ProgressAction ] [-WhatIf] [-Confirm] []
```
## DESCRIPTION
@@ -114,6 +114,21 @@ Accept pipeline input: False
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Set-TerminalIconsIcon.md b/docs/en-US/Set-TerminalIconsIcon.md
index 46e58bd..cdc1b3e 100644
--- a/docs/en-US/Set-TerminalIconsIcon.md
+++ b/docs/en-US/Set-TerminalIconsIcon.md
@@ -15,23 +15,26 @@ swapping one glyph for another.
### FileExtension (Default)
```
-Set-TerminalIconsIcon -FileExtension -Glyph [-Force] [-WhatIf] [-Confirm]
- []
+Set-TerminalIconsIcon -FileExtension -Glyph [-Force] [-ProgressAction ]
+ [-WhatIf] [-Confirm] []
```
### Directory
```
-Set-TerminalIconsIcon -Directory -Glyph [-Force] [-WhatIf] [-Confirm] []
+Set-TerminalIconsIcon -Directory -Glyph [-Force] [-ProgressAction ]
+ [-WhatIf] [-Confirm] []
```
### FileName
```
-Set-TerminalIconsIcon -FileName -Glyph [-Force] [-WhatIf] [-Confirm] []
+Set-TerminalIconsIcon -FileName -Glyph [-Force] [-ProgressAction ]
+ [-WhatIf] [-Confirm] []
```
### SwapGlyph
```
-Set-TerminalIconsIcon -NewGlyph -Glyph [-Force] [-WhatIf] [-Confirm] []
+Set-TerminalIconsIcon -NewGlyph -Glyph [-Force] [-ProgressAction ]
+ [-WhatIf] [-Confirm] []
```
## DESCRIPTION
@@ -196,6 +199,21 @@ Accept pipeline input: False
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Set-TerminalIconsTheme.md b/docs/en-US/Set-TerminalIconsTheme.md
index 1a3fd39..ba30390 100644
--- a/docs/en-US/Set-TerminalIconsTheme.md
+++ b/docs/en-US/Set-TerminalIconsTheme.md
@@ -14,14 +14,14 @@ schema: 2.0.0
### theme (Default)
```
-Set-TerminalIconsTheme [-IconTheme ] [-ColorTheme ] [-Force] [-WhatIf] [-Confirm]
- []
+Set-TerminalIconsTheme [-IconTheme ] [-ColorTheme ] [-Force]
+ [-ProgressAction ] [-WhatIf] [-Confirm] []
```
### notheme
```
-Set-TerminalIconsTheme [-DisableColorTheme] [-DisableIconTheme] [-Force] [-WhatIf] [-Confirm]
- []
+Set-TerminalIconsTheme [-DisableColorTheme] [-DisableIconTheme] [-Force] [-ProgressAction ]
+ [-WhatIf] [-Confirm] []
```
## DESCRIPTION
@@ -143,6 +143,21 @@ Accept pipeline input: False
Accept wildcard characters: False
```
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/en-US/Show-TerminalIconsTheme.md b/docs/en-US/Show-TerminalIconsTheme.md
index 5d9a801..e9e766e 100644
--- a/docs/en-US/Show-TerminalIconsTheme.md
+++ b/docs/en-US/Show-TerminalIconsTheme.md
@@ -13,7 +13,7 @@ List example directories and files to show the currently applied color and icon
## SYNTAX
```
-Show-TerminalIconsTheme []
+Show-TerminalIconsTheme [-ProgressAction ] []
```
## DESCRIPTION
@@ -31,6 +31,21 @@ List example directories and files to show the currently applied color and icon
## PARAMETERS
+### -ProgressAction
+{{ Fill ProgressAction Description }}
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/tests/unit/Format-TerminalIcons.tests.ps1 b/tests/unit/Format-TerminalIcons.tests.ps1
index f92b20a..f215b1c 100644
--- a/tests/unit/Format-TerminalIcons.tests.ps1
+++ b/tests/unit/Format-TerminalIcons.tests.ps1
@@ -19,4 +19,68 @@ Describe 'Format-TerminalIcons' {
$string | Should -BeLike "*$([char]0xf15b)*"
}
}
+
+ Context 'Deserialized object handling' {
+ BeforeAll {
+ # Create mock deserialized DirectoryInfo object
+ $deserializedFolder = [PSCustomObject]@{
+ PSTypeName = 'Deserialized.System.IO.DirectoryInfo'
+ Name = 'TestFolder'
+ PSIsContainer = $true
+ Extension = ''
+ LinkType = $null
+ Target = $null
+ }
+ $deserializedFolder.PSObject.TypeNames.Insert(0, 'Deserialized.System.IO.DirectoryInfo')
+
+ # Create mock deserialized FileInfo object
+ $deserializedFile = [PSCustomObject]@{
+ PSTypeName = 'Deserialized.System.IO.FileInfo'
+ Name = 'TestFile.ps1'
+ PSIsContainer = $false
+ Extension = '.ps1'
+ LinkType = $null
+ Target = $null
+ }
+ $deserializedFile.PSObject.TypeNames.Insert(0, 'Deserialized.System.IO.FileInfo')
+
+ # Create mock deserialized symlink object
+ $deserializedSymlink = [PSCustomObject]@{
+ PSTypeName = 'Deserialized.System.IO.FileInfo'
+ Name = 'TestLink'
+ PSIsContainer = $false
+ Extension = ''
+ LinkType = 'SymbolicLink'
+ Target = 'C:\Target\Path'
+ }
+ $deserializedSymlink.PSObject.TypeNames.Insert(0, 'Deserialized.System.IO.FileInfo')
+ }
+
+ It 'Accepts deserialized DirectoryInfo objects' {
+ { $deserializedFolder | Format-TerminalIcons } | Should -Not -Throw
+ }
+
+ It 'Accepts deserialized FileInfo objects' {
+ { $deserializedFile | Format-TerminalIcons } | Should -Not -Throw
+ }
+
+ It 'Resolves deserialized directory to a default icon' {
+ $string = $deserializedFolder | Format-TerminalIcons
+ $string | Should -BeLike "*$([char]0xf413)*"
+ }
+
+ It 'Resolves deserialized file to a default icon' {
+ $string = $deserializedFile | Format-TerminalIcons
+ $string | Should -BeLike "*$([char]0xf15b)*"
+ }
+
+ It 'Handles deserialized symlink objects without error' {
+ { $deserializedSymlink | Format-TerminalIcons } | Should -Not -Throw
+ }
+
+ It 'Includes target path for deserialized symlinks' {
+ $string = $deserializedSymlink | Format-TerminalIcons
+ $string | Should -BeLike "*Target*"
+ }
+ }
}
diff --git a/tests/unit/Test-DeserializedFileSystemInfo.tests.ps1 b/tests/unit/Test-DeserializedFileSystemInfo.tests.ps1
new file mode 100644
index 0000000..4869174
--- /dev/null
+++ b/tests/unit/Test-DeserializedFileSystemInfo.tests.ps1
@@ -0,0 +1,74 @@
+Describe 'Test-DeserializedFileSystemInfo' {
+ BeforeAll {
+ # Import the module to get access to private functions
+ $modulePath = Join-Path $PSScriptRoot '..\..\Terminal-Icons\Terminal-Icons.psd1'
+ Import-Module $modulePath -Force
+
+ # Get the private function
+ $testFunction = Get-Command Test-DeserializedFileSystemInfo -Module Terminal-Icons -ErrorAction SilentlyContinue
+ if (-not $testFunction) {
+ # If not exported, dot-source the private function file
+ . (Join-Path $PSScriptRoot '..\..\Terminal-Icons\Private\Test-DeserializedFileSystemInfo.ps1')
+ }
+ }
+
+ Context 'Local FileSystemInfo objects' {
+ BeforeAll {
+ $folderName = [System.IO.Path]::GetRandomFileName().Split('.')[0]
+ $fileName = [System.IO.Path]::GetRandomFileName().Split('.')[0] + '.txt'
+ $folder = New-Item -Path "TestDrive:/$folderName" -Type Directory
+ $file = New-Item -Path "TestDrive:/$fileName"
+ }
+
+ It 'Returns $false for local DirectoryInfo objects' {
+ Test-DeserializedFileSystemInfo -InputObject $folder | Should -Be $false
+ }
+
+ It 'Returns $false for local FileInfo objects' {
+ Test-DeserializedFileSystemInfo -InputObject $file | Should -Be $false
+ }
+ }
+
+ Context 'Deserialized FileSystemInfo objects' {
+ BeforeAll {
+ # Create mock deserialized DirectoryInfo object
+ $deserializedFolder = [PSCustomObject]@{
+ Name = 'TestFolder'
+ PSIsContainer = $true
+ Extension = ''
+ }
+ $deserializedFolder.PSObject.TypeNames.Insert(0, 'Deserialized.System.IO.DirectoryInfo')
+
+ # Create mock deserialized FileInfo object
+ $deserializedFile = [PSCustomObject]@{
+ Name = 'TestFile.ps1'
+ PSIsContainer = $false
+ Extension = '.ps1'
+ }
+ $deserializedFile.PSObject.TypeNames.Insert(0, 'Deserialized.System.IO.FileInfo')
+ }
+
+ It 'Returns $true for deserialized DirectoryInfo objects' {
+ Test-DeserializedFileSystemInfo -InputObject $deserializedFolder | Should -Be $true
+ }
+
+ It 'Returns $true for deserialized FileInfo objects' {
+ Test-DeserializedFileSystemInfo -InputObject $deserializedFile | Should -Be $true
+ }
+ }
+
+ Context 'Other object types' {
+ It 'Returns $false for string objects' {
+ Test-DeserializedFileSystemInfo -InputObject 'test' | Should -Be $false
+ }
+
+ It 'Returns $false for hashtable objects' {
+ Test-DeserializedFileSystemInfo -InputObject @{Name='test'} | Should -Be $false
+ }
+
+ It 'Returns $false for generic PSCustomObject' {
+ $obj = [PSCustomObject]@{Name='test'}
+ Test-DeserializedFileSystemInfo -InputObject $obj | Should -Be $false
+ }
+ }
+}