# encoding: ascii
# api: powershell
# title: Update-SysinternalsSuite
# description: Function to download the current Sysinternals Tools from: http://live.sysinternals.com
# version: 0.1
# type: script
# author: thomas torggler
# license: CC0
# function: Update-SysinternalsSuite
# x-poshcode-id: 3812
# x-archived: 2012-12-06T03:49:19
# x-published: 2012-12-04T08:15:00
#
# Uses Invoke-WebRequest, so v3 is required
# Check my blog for more: http://www.ntsystems.it/post/PowerShell-v3-Invoke-WebRequest.aspx
#
<#
.Synopsis
Update Sysinternals Suite.
.DESCRIPTION
Use PowerShell v3's Invoke-WebRequest do download the latest Sysinternals Tools from: http://live.sysinternals.com. Supports -AsJob
.EXAMPLE
Update-SysinternalsSuite -Path C:\tools\sysinterals
This Example downloads all sysinternals tools to C:\tools\sysinternals.
.EXAMPLE
Update-SysinternalsSuite -Path C:\tools\sysinterals -AsJob
This Example downloads all sysinternals tools to C:\tools\sysinternals, it creates a background job to keep your command line usable!
#>
function Update-SysinternalsSuite
{
[CmdletBinding(DefaultParameterSetName='Parameter Set 1',
SupportsShouldProcess=$true,
ConfirmImpact='Medium')]
Param
(
# Path specifies where to save the tools
[Parameter(Mandatory=$true,
Position=0,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
$Path,
# AsJob, start a job
[Parameter(Mandatory=$false)]
[switch]
$AsJob
)
Begin
{
# check if folder exists, if not create folder
if (Test-Path $Path) {
Write-Verbose "Path exists, updating $Path"
} else {
Write-Verbose "Path does not exist, creating folder $path"
try {
New-Item -Path $Path -ItemType Directory -ErrorAction Stop
} catch {
Write-Error "Could not create Folder"
}
}
# Define Scriptblock
$myscriptblock = {
param ($path)
Invoke-WebRequest -Uri live.sysinternals.com | Select-Object -ExpandProperty Links |
ForEach-Object {
if ($_.href -like '*.exe' -or $_.href -like '*.chm' -or $_.href -like '*.hlp' -or $_.href -like '*.sys' -or $_.href -like '*.txt' -or $_.href -like '*.cnt'){
$str = "http://live.sysinternals.com"+$($_.href)
Invoke-WebRequest -Uri $str -OutFile $path$($_.href)
}
else {
Write-Output "Skipped: $($_.href)"
}
}
} # end Scriptblock
}
Process
{
if ($AsJob) {
Write-Verbose "AsJob is $AsJob - Creating a background job"
# using -ArgumentList (,$Array) to pass an array to the ScriptBlock
Start-Job -ScriptBlock $myscriptblock -ArgumentList ($path)
} else {
Write-Verbose "AsJob is $AsJob - Running script normally"
# using -ArgumentList (,$Array) to pass an array to the ScriptBlock
Invoke-Command -ScriptBlock $myscriptblock -ArgumentList ($path)
}
}
End
{
}
}