Skip to content

Instantly share code, notes, and snippets.

@akanieski
Last active February 28, 2019 17:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akanieski/f769d86a83681d74d5f053490449512c to your computer and use it in GitHub Desktop.
Save akanieski/f769d86a83681d74d5f053490449512c to your computer and use it in GitHub Desktop.
Search a directory for pkgdef files that have sibling exe files with same name
param ([string]$startDir = ".\", [string]$logFile = ".\pkgdef_match.log", $fileSize=1mb)
function Write-Log
{
param([string]$content)
$formattedContent = "[" + [System.DateTime]::UtcNow.ToString() + "] " + $content
Write-Output $formattedContent
[System.IO.File]::AppendAllText($logfile, $formattedContent + [System.Environment]::NewLine)
}
function Reset-Log
{
#function checks to see if file in question is larger than the paramater specified if it is it will roll a log and delete the oldes log if there are more than x logs.
param([string]$fileName, [int64]$filesize = 1mb , [int] $logcount = 5)
$logRollStatus = $true
if(test-path $filename)
{
$file = Get-ChildItem $filename
if((($file).length) -ige $filesize) #this starts the log roll
{
$fileDir = $file.Directory
$fn = $file.name #this gets the name of the file we started with
$files = Get-ChildItem $filedir | ?{$_.name -like "$fn*"} | Sort-Object lastwritetime
$filefullname = $file.fullname #this gets the fullname of the file we started with
#$logcount +=1 #add one to the count as the base file is one more than the count
for ($i = ($files.count); $i -gt 0; $i--)
{
#[int]$fileNumber = ($f).name.Trim($file.name) #gets the current number of the file we are on
$files = Get-ChildItem $filedir | ?{$_.name -like "$fn*"} | Sort-Object lastwritetime
$operatingFile = $files | ?{($_.name).trim($fn) -eq $i}
if ($operatingfile)
{$operatingFilenumber = ($files | ?{($_.name).trim($fn) -eq $i}).name.trim($fn)}
else
{$operatingFilenumber = $null}
if(($operatingFilenumber -eq $null) -and ($i -ne 1) -and ($i -lt $logcount))
{
$operatingFilenumber = $i
$newfilename = "$filefullname.$operatingFilenumber"
$operatingFile = $files | ?{($_.name).trim($fn) -eq ($i-1)}
write-host "moving to $newfilename"
move-item ($operatingFile.FullName) -Destination $newfilename -Force
}
elseif($i -ge $logcount)
{
if($operatingFilenumber -eq $null)
{
$operatingFilenumber = $i - 1
$operatingFile = $files | ?{($_.name).trim($fn) -eq $operatingFilenumber}
}
write-host "deleting " ($operatingFile.FullName)
remove-item ($operatingFile.FullName) -Force
}
elseif($i -eq 1)
{
$operatingFilenumber = 1
$newfilename = "$filefullname.$operatingFilenumber"
write-host "moving to $newfilename"
move-item $filefullname -Destination $newfilename -Force
}
else
{
$operatingFilenumber = $i +1
$newfilename = "$filefullname.$operatingFilenumber"
$operatingFile = $files | ?{($_.name).trim($fn) -eq ($i-1)}
write-host "moving to $newfilename"
move-item ($operatingFile.FullName) -Destination $newfilename -Force
}
}
}
else
{ $logRollStatus = $false}
}
else
{
$logrollStatus = $false
}
$LogRollStatus
}
$resetResult = Reset-Log -fileName $logFile -filesize $fileSize -logcount 5
Write-Log -content ("Starting Package Def Search in " + $startDir)
Get-ChildItem -Path $startDir -Filter *.pkgdef -Recurse -Depth 100 -File -Name| ForEach-Object {
$file = $_
$exePair = $file
$exePair = $exePair.ToLower().Replace(".pkgdef",".exe")
$exePair = [System.IO.Path]::Combine($startDir, $exePair)
if([System.IO.File]::Exists($exePair)) {
Write-Log -content ("Found Matching EXE: " + $exePair)
}
}
Write-Log -content "Finished Package Def Search."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment