Основная проблема, с которой вы столкнетесь, - [IO.Path]::GetFileNameWithoutExtension($SURL)
, которая не поддерживает концепцию нескольких расширений.
Добавив особое внимание для нескольких точек расширения,
Вот то, что должно работать для вас.
Добавьте любые другие множественные расширения (за исключением манифеста) в $DoubleExtensions
, чтобы охватить другие возможные случаи.
Учтите следующее:
Function Get-FileInfos($FullName) {
$DoubleExtensions = @('.tar.gz')
$Manifestext = '.manifest'
$IsManifest = $FullName.EndsWith($Manifestext)
$Extension, $TrimmedName = $null
$NameToProcess = $FullName
# Process manifest extention
if ($IsManifest) {
$TrimmedName = [IO.Path]::GetFileNameWithoutExtension($FullName)
$NameToProcess = $TrimmedName
}
# Process double extensions
Foreach ($Ext in $DoubleExtensions) {
if ($NameToProcess.EndsWith($Ext)) {
if ($IsManifest -eq $false) {
$Extension = $Ext
$ShortName = $NameToProcess.Substring(0, $NameToProcess.Length - $ext.Length)
}
else {
$Extension = $Ext
$ShortName = $NameToProcess
}
break
}
}
# Process normal extensions
if ($null -eq $Extension ) {
if ($IsManifest -eq $false) {
$Extension = [io.Path]::GetExtension($NameToProcess)
$ShortName = [IO.Path]::GetFileNameWithoutExtension($NameToProcess)
}
else {
$ShortName = $NameToProcess
}
}
# If manifest, extension should be .manifest without original file extension
if ($IsManifest) { $Extension = $Manifestext }
return [PSCustomObject]@{
FullName = $FullName
TrimmedName = $TrimmedName
ShortName = $ShortName
Extension = $Extension
}
}
Образец теста
$TestList = @(
'ABC.sample.tar.gz.manifest'
'DEF.sample.tar.gz'
'GHI.Sample.manifest'
'JKL.exe'
)
$TestList | foreach { Get-FileInfos -FullName $_ }
Результат
![Results](https://i.stack.imgur.com/jNtsm.png)