mikelieman icon

drop-sxs-collect.ps1

mikelieman | PRO | 03/08/21 12:09:38 AM UTC (Edited) | 0 ⭐ | 604 👁️ | Never ⏰ | []
PowerShell |

2.13 KB

|

None

|

0 👍

/

0 👎

#
#
#
 
 
param ($computer)
if ($computer -eq $null)  {
    $computer = read-host -Prompt "Please enter a computer name (e.g.: bgc-kevin, bgc-mike, bgc-dean,...)" 
} 
 
function cleanup-remote {
 
    param ($RemovableFiles)
 
    ForEach ($RemovableFile in $RemovableFiles) {
    
        $retval = Invoke-Command -Session $rs -ScriptBlock { 
            Param($RemovableFile)
            Try {
                Remove-Item -LiteralPath $RemovableFile -ErrorAction Stop
                return "Removed $RemovableFile"
            }
            Catch {
                return $_
            }
        } -ArgumentList $RemovableFile
        
        # note, $retval now has any output from the try/catch block
        Write-Host "<d> $computer - $retval"
        
    }  # ForEach
}
 
#
# Define paths
#
$LogFileSource  = "C:\Windows\Logs\WindowsUpdate\WinSxS-stats.txt"
$LogFileTarget  = "C:\Users\administrator.CORP\stats-$computer.txt"
 
$PayloadSource  = "C:\Users\administrator.CORP\code\collect-sxs-info.ps1"
$PayloadTarget  = "C:\Users\Administrator\collect-sxs-info.ps1"
 
$DuFileSource   = "C:\Users\administrator.CORP\code\du64.exe"
$DuFileTarget   = "C:\Users\Administrator\du64.exe"
 
[string[]]$RemovableFiles = $LogFileSource, $PayloadTarget, $DuFileTarget
 
#
# Connect  
#
$rs = New-PSSession $computer
Write-Host "<o> $computer - Opened connection $rs"
 
Cleanup-Remote($RemovableFiles)
 
#
# Drop files
#
Copy-Item -ToSession $rs $PayloadSource -Destination $PayloadTarget
Write-Host "--> $computer - Delivered $PayloadTarget"
 
Copy-Item -ToSession $rs $DuFileSource -Destination $DuFileTarget
Write-Host "--> $computer - Delivered $DuFileTarget"
 
 
#
# Run
#
Write-Host -nonewline "<-> $computer - Running collect-sxs-info.ps1...  "
Invoke-Command -Session $rs -ScriptBlock { C:\Users\Administrator\collect-sxs-info.ps1 }
Write-Host "Done"
 
#
# Check data
#
# Invoke-Command -Session $rs -ScriptBlock { Param($path); Get-ChildItem -Path $path } -ArgumentList $LogFileSource
#
Copy-Item -FromSession $rs $LogFileSource -Destination $LogFileTarget
Write-Host "<-- $computer - Received $LogFileTarget"
 
 
#
# Cleanup
#
Cleanup-Remote($RemovableFiles)
Remove-PSSession -session $rs 
write-host "<c> $computer - Closed connection $rs"
 
 

Comments