89 lines
3.4 KiB
PowerShell
89 lines
3.4 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Script will discover all files that are considered "expired".
|
|
.DESCRIPTION
|
|
Script will discover all files that are considered "expired" based on the parameters in the ./Helpers/ITDExpiredFiles.json files in the ITD-WindowsServer module
|
|
.NOTES
|
|
Information or caveats about the function e.g. 'This function is not supported in Linux'
|
|
.LINK
|
|
|
|
.EXAMPLE
|
|
Get-ITDExpiredFiles
|
|
.EXAMPLE
|
|
Get-ITDExpiredFiles -Credential $PrvCred
|
|
.EXAMPLE
|
|
Get-ITDExpiredFiles -ComputerName itdxyz.nd.gov -Credential $PrvCred
|
|
#>
|
|
|
|
function Get-ITDExpiredFiles {
|
|
[CmdletBinding()]
|
|
param (
|
|
[string]
|
|
$ComputerName,
|
|
|
|
[PSCredential]
|
|
$Credential
|
|
)
|
|
Begin {
|
|
Write-Verbose -Message "Load json files into memory"
|
|
$JsonFiles = Get-ChildItem -Path "$PSScriptRoot\..\Helpers\*.json" | Where-Object Name -NE ^template.json
|
|
$MachineInfo = ForEach ($file in $JsonFiles) {
|
|
Get-Content -Path $file.FullName | ConvertFrom-Json
|
|
}
|
|
|
|
If ($PSBoundParameters.ContainsKey('ComputerName')) {
|
|
Write-Verbose -Message "ComputerName found"
|
|
$MachineInfo = $MachineInfo | Where-Object ComputerName -EQ $ComputerName
|
|
}
|
|
}
|
|
|
|
Process {
|
|
Write-Verbose -Message "Prep discovery function"
|
|
$GetExpiredFilesFunc = {
|
|
Write-Verbose -Message ($env:COMPUTERNAME + " " + $args[0] + " " + $args[1] + " " + $args[2])
|
|
|
|
$GetChildItemParams = @{
|
|
Path = $args[0];
|
|
Filter = $args[1];
|
|
Recurse = $args[2];
|
|
}
|
|
|
|
$FilesFound = (Get-ChildItem @GetChildItemParams | Where-Object LastWriteTime -LT ((Get-Date).AddDays(-$args[3])))
|
|
Write-Output $FilesFound
|
|
}
|
|
|
|
$GetITDExpiredFilesResult = [System.Collections.ArrayList]@()
|
|
ForEach ($Server in $MachineInfo) {
|
|
Write-Verbose -Message ("Start " + $Server.ComputerName)
|
|
|
|
Write-Verbose -Message "Ping test before any Invoke-Command"
|
|
If ((Test-NetConnection -ComputerName $Server.ComputerName).PingSucceeded) {
|
|
ForEach ($Directory in $Server.Directory) {
|
|
Write-Verbose -Message ("Start " + $server.ComputerName + " " + $Directory.Path)
|
|
$FilesFoundOnServer = $null
|
|
$InvokeCommandParams = $null
|
|
$InvokeResult = $null
|
|
|
|
$InvokeCommandParams = @{
|
|
ComputerName = $Server.ComputerName;
|
|
Credential = $Credential;
|
|
ScriptBlock = $GetExpiredFilesFunc;
|
|
ArgumentList = @($Directory.Path, ("*" + $Directory.Extension), $Directory.Recursive, $Directory.DaysToKeep);
|
|
}
|
|
$FilesFoundOnServer = Invoke-Command @InvokeCommandParams
|
|
Write-Output $FilesFoundOnServer
|
|
#$null = $GetITDExpiredFilesResult.Add($FilesFoundOnServer)
|
|
Write-Verbose -Message ("End " + $server.ComputerName + " " + $Directory.Path)
|
|
}
|
|
}
|
|
Else {
|
|
Write-Error -Message ($Server.ComputerName + " ping test failed, generate ticket someday.")
|
|
}
|
|
}
|
|
Write-Verbose -Message ("End " + $server.ComputerName)
|
|
}
|
|
End {
|
|
#Write-Output $GetITDExpiredFilesResult
|
|
Write-Verbose -Message "End Get-ITDExpiredFiles"
|
|
}
|
|
} |