# # # 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 " $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 " $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 " $computer - Closed connection $rs"