update
This commit is contained in:
+89
@@ -0,0 +1,89 @@
|
||||
<#
|
||||
.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"
|
||||
}
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
function Remove-ITDExpiredFiles {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[string]
|
||||
$ComputerName,
|
||||
|
||||
[switch]
|
||||
$WhatIf,
|
||||
|
||||
[PSCredential]
|
||||
$Credential
|
||||
)
|
||||
Begin {
|
||||
Write-Verbose -Message "Start Remove-ITDExpiredFiles"
|
||||
}
|
||||
Process {
|
||||
$FilesRemovedSuccess = @()
|
||||
$FilesRemovedFailure = @()
|
||||
$GetITDExpiredFilesAutoParams += @{}
|
||||
|
||||
If ($PSBoundParameters.ContainsKey('ComputerName')) {
|
||||
Write-Verbose -Message "ComputerName parameter found"
|
||||
$GetITDExpiredFilesParams += @{
|
||||
ComputerName = $ComputerName;
|
||||
}
|
||||
}
|
||||
|
||||
If ($PSBoundParameters.ContainsKey('Credential')) {
|
||||
Write-Verbose -Message "Credential parameter found"
|
||||
$GetITDExpiredFilesParams += @{
|
||||
Credential = $Credential;
|
||||
}
|
||||
}
|
||||
$FilesToRemove = Get-ITDExpiredFiles @GetITDExpiredFilesParams
|
||||
Write-Verbose -Message ("Found " + $FilesToRemove.count + " expired files to remove")
|
||||
|
||||
ForEach ($File in $FilesToRemove) {
|
||||
Write-Verbose -Message ("Start~" + $File.PSComputerName + "~" + $File.FullName )
|
||||
$InvokeCommandParams = @{
|
||||
ComputerName = $File.PSComputerName;
|
||||
Credential = $Credential;
|
||||
ErrorAction = 'Stop';
|
||||
ArgumentList = @($File.FullName);
|
||||
ScriptBlock = { Get-Item -Path $args[0] | Remove-Item }
|
||||
}
|
||||
|
||||
switch ($WhatIf) {
|
||||
$true {
|
||||
try {
|
||||
Write-Verbose -Message ("Process~" + $File.PSComputerName + "~" + $File.FullName + " removed")
|
||||
Write-Host -Message ($Server.ComputerName + " -- " + 'What if: Performing the operation "Remove File" on target ' + $File.FullName)
|
||||
# log success
|
||||
$FilesRemovedSuccess += [PSCustomObject]@{
|
||||
ComputerName = $File.PSComputerName;
|
||||
Name = $File.Fullname;
|
||||
Timestamp = (Get-Date).tostring("yyyy/MM/dd HH:mm:ss")
|
||||
}
|
||||
Write-Output $File
|
||||
}
|
||||
catch {
|
||||
Write-Verbose -Message ("Process~" + $File.PSComputerName + "~" + $File.FullName + " failure")
|
||||
# log failure
|
||||
$FilesRemovedFailure += [PSCustomObject]@{
|
||||
ComputerName = $File.PSComputerName;
|
||||
Name = $File.Fullname;
|
||||
Timestamp = (Get-Date).tostring("yyyy/MM/dd HH:mm:ss")
|
||||
}
|
||||
}
|
||||
}
|
||||
Default {
|
||||
try {
|
||||
Invoke-Command @InvokeCommandParams
|
||||
Write-Verbose -Message ("Process~" + $File.PSComputerName + "~" + $File.FullName + " removed")
|
||||
# log success
|
||||
$FilesRemovedSuccess += [PSCustomObject]@{
|
||||
ComputerName = $File.PSComputerName;
|
||||
Name = $File.Fullname;
|
||||
Timestamp = (Get-Date).tostring("yyyy/MM/dd HH:mm:ss")
|
||||
}
|
||||
Write-Output $File
|
||||
}
|
||||
catch {
|
||||
Write-Verbose -Message ("Start~" + $File.PSComputerName + "~" + $File.FullName + " failure")
|
||||
# log failure
|
||||
$FilesRemovedFailure += [PSCustomObject]@{
|
||||
ComputerName = $File.PSComputerName;
|
||||
Name = $File.Fullname;
|
||||
Timestamp = (Get-Date).tostring("yyyy/MM/dd HH:mm:ss")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Write-Verbose -Message ("End~" + $File.PSComputerName + "~" + $File.FullName )
|
||||
}
|
||||
}
|
||||
End {
|
||||
Write-Verbose -Message "End Remove-ITDExpiredFilesAuto"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user