-1

I am new to powershell. I have a text file as below. I need to sort this file in powershell.

`
<!DOCTYPE html>
<html>
<head><meta name="robots" content="noindex" />
<title>Index of pme-modernization/ModuleBuilder/develop</title>
</head>
<body>
<h1>Index of pme-modernization/ModuleBuilder/develop</h1>
<pre>Name                                                             Last modified      Size</pre><hr/>
<pre><a href="../">../</a>
<a href="jenkins-ModuleBuilder-develop-100_BuildOutput.zip">jenkins-ModuleBuilder-develop-100_BuildOutput.zip</a>                 05-Jul-2023 10:28  16.76 MB
<a href="jenkins-ModuleBuilder-develop-100_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-100_BuildOutput.zip_BuildInfo.txt</a>   05-Jul-2023 10:28  758 bytes
<a href="jenkins-ModuleBuilder-develop-101_BuildOutput.zip">jenkins-ModuleBuilder-develop-101_BuildOutput.zip</a>                 07-Jul-2023 04:49  16.76 MB
<a href="jenkins-ModuleBuilder-develop-101_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-101_BuildOutput.zip_BuildInfo.txt</a>   07-Jul-2023 04:49  758 bytes
<a href="jenkins-ModuleBuilder-develop-102_BuildOutput.zip">jenkins-ModuleBuilder-develop-102_BuildOutput.zip</a>                 10-Jul-2023 08:49  18.30 MB
<a href="jenkins-ModuleBuilder-develop-102_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-102_BuildOutput.zip_BuildInfo.txt</a>   10-Jul-2023 08:49  758 bytes
<a href="jenkins-ModuleBuilder-develop-103_BuildOutput.zip">jenkins-ModuleBuilder-develop-103_BuildOutput.zip</a>                 17-Jul-2023 06:44  18.30 MB
<a href="jenkins-ModuleBuilder-develop-103_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-103_BuildOutput.zip_BuildInfo.txt</a>   17-Jul-2023 06:45  758 bytes
<a href="jenkins-ModuleBuilder-develop-104_BuildOutput.zip">jenkins-ModuleBuilder-develop-104_BuildOutput.zip</a>                 20-Jul-2023 16:22  18.31 MB
<a href="jenkins-ModuleBuilder-develop-104_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-104_BuildOutput.zip_BuildInfo.txt</a>   20-Jul-2023 16:22  758 bytes
<a href="jenkins-ModuleBuilder-develop-105_BuildOutput.zip">jenkins-ModuleBuilder-develop-105_BuildOutput.zip</a>                 24-Jul-2023 12:02  18.31 MB
<a href="jenkins-ModuleBuilder-develop-105_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-105_BuildOutput.zip_BuildInfo.txt</a>   24-Jul-2023 12:03  758 bytes
<a href="jenkins-ModuleBuilder-develop-106_BuildOutput.zip">jenkins-ModuleBuilder-develop-106_BuildOutput.zip</a>                 24-Jul-2023 13:53  18.31 MB
<a href="jenkins-ModuleBuilder-develop-106_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-106_BuildOutput.zip_BuildInfo.txt</a>   24-Jul-2023 13:54  758 bytes
<a href="jenkins-ModuleBuilder-develop-107_BuildOutput.zip">jenkins-ModuleBuilder-develop-107_BuildOutput.zip</a>                 25-Jul-2023 06:30  18.31 MB
<a href="jenkins-ModuleBuilder-develop-107_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-107_BuildOutput.zip_BuildInfo.txt</a>   25-Jul-2023 06:30  758 bytes
<a href="jenkins-ModuleBuilder-develop-108_BuildOutput.zip">jenkins-ModuleBuilder-develop-108_BuildOutput.zip</a>                 26-Jul-2023 13:42  20.59 MB
<a href="jenkins-ModuleBuilder-develop-108_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-108_BuildOutput.zip_BuildInfo.txt</a>   26-Jul-2023 13:42  758 bytes
<a href="jenkins-ModuleBuilder-develop-109_BuildOutput.zip">jenkins-ModuleBuilder-develop-109_BuildOutput.zip</a>                 27-Jul-2023 09:29  20.59 MB`

I tried these commands but does not seem to work

Get-Content -Path C:\toBeDeleted\Output.txt |Sort-Object LastWriteTime -Descending
Get-Content -Path C:\toBeDeleted\Output.txt |Sort-Object { [int] $_ }
5
  • 2
    This would be a lot easier to do if you sort the data before generating the HTML. Where did the data come from? Commented Jul 31, 2023 at 10:33
  • This comes from a artifactory, I am not able to sort it there. The command I use to fetch this is curl -u username:password --silent artifactory.mas.emrsn.org/artifactory/pme-modernization/… > C:\toBeDeleted\Output.txt Commented Jul 31, 2023 at 10:44
  • 1
    I'm not too sure what it is your wanting to sort? It already looks to be in date and name order.
    – KG-DROID
    Commented Jul 31, 2023 at 11:10
  • if you see jenkins-ModuleBuilder-develop-100_BuildOutput.zip is first and then jenkins-ModuleBuilder-develop-109_BuildOutput.zip,. But if you see their creation date , date of 109 is latest. So I need to fetch it Commented Jul 31, 2023 at 11:18
  • 1
    Are you wanting the output to be an HTML file with the lines sorted?
    – lit
    Commented Jul 31, 2023 at 13:05

1 Answer 1

0

It seems very strange to not have this sorted how you desire prior to export. One option is to parse the text to get the date to sort and then parse the text again to get the file name.

# Grab only the lines we are interested in
$latest = @(Get-Content -Path C:\toBeDeleted\Output.txt) -match '^<a' |
    # Sort on an expression, a temporary calculated property
    Sort-Object -Property {Get-Date ($_ -replace '^.+(\d{2}-.+:\d{2}).+$','$1')} -Descending |
        # We sorted -Descending putting the newest first so we grab it
        Select-Object -First 1

At this point $latest should contain the line with the latest date. For this example that would be

$latest

<a href="jenkins-ModuleBuilder-develop-109_BuildOutput.zip">jenkins-ModuleBuilder-develop-109_BuildOutput.zip</a>                 27-Jul-2023 09:29  20.59 MB`

Now we parse again to grab the file

$latest -replace '<a.+">|</a.+$'

jenkins-ModuleBuilder-develop-109_BuildOutput.zip

You could also go ahead and convert the desired lines into objects and then process them as you attempted to.

# regex pattern
$pattern = '<a.+">(?<FileName>.+?)</a.+?(?<LastWriteTime>\d{2}-.+:\d{2})\s+(?<Size>\d+\.\d+\s\w+)'

$filelist = Get-Content -Path C:\toBeDeleted\Output.txt |
    ForEach-Object {
        if($_ -match $pattern){
            $matches.Remove(0)
            [PSCustomObject]$matches
        }
    }

$latest = $filelist | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1

$latest

LastWriteTime     FileName                                          Size
-------------     --------                                          ----
27-Jul-2023 09:29 jenkins-ModuleBuilder-develop-109_BuildOutput.zip 20.59 MB

$latest.FileName

jenkins-ModuleBuilder-develop-109_BuildOutput.zip

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.