# encoding: ascii
# api: powershell
# title: Remote Install
# description: This script allows an administrator to install software from either a local folder on their administration PC or from a network share. Target computers to receive the installation are defined ahead of time in a text file.
# version: 0.1
# type: function
# author: AlphaSun
# license: CC0
# function: Install-Software
# x-poshcode-id: 6902
# x-archived: 2017-05-30T19:09:22
# x-published: 2017-05-22T17:53:00
#
# The specified installer is copied locally to the C:\TEMP folder of each of the target computers and an installer process is initiated locally on each target. Arguments for the installer file can be provided and are optional.
#
function Install-Software{
#.Synopsis
#  Install software from a UNC path to a remote computer
#.Description
#  This script allows an administrator to install software from either a local folder on their administration PC or
#  from a network share. Target computers to receive the installation are defined ahead of time in a text file.
#
#  The specified installer is copied locally to the C:\TEMP folder of each of the target computers and an installer
#  process is initiated locally on each target. Arguments for the installer file can be provided and are optional.
#.Parameter Targets
#  Input file of target computers. The file should be a plain text file with one target system on each line.
#.Parameter Install
#  The UNC path to the executable file. Arguments are listed separately and should not be specified here.
#.Parameter Arguments
#  Arguments for the executable.
#.Example
#  Install-Software -Targets .\computers.txt -Install "\\MyServer\MyShare\Folder\setup.exe" -Arguments "/V/qn NoRestart"
#
#  Description
#  -----------
#  Copies setup.exe from \\MyServer\MyShare\Folder to each of the target computers listed in computers.txt and initiates
#  setup.exe with the arguments "/V/qn NoRestart".
#.Example
#  Install-Software -Targets "\\MyServer\MyShare\Targets\computers.txt" -Install "E:\Folder\install.exe"
#
#  Description
#  -----------
#  Copies install.exe from E:\Folder on the local computer to each of the target computers listed in computers.txt and
#  initiates install.exe with no arguments.

[CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='Low')] 
param( 
	[parameter(Mandatory = $true, Position = 0)] 
	[string]$Targets,
	[parameter(Mandatory = $true, Position = 1)] 
	[string]$Install,
	[parameter(Mandatory = $false, Position = 2)] 
	[string]$Arguments
) 

# Get target computer list
$Computers = Get-Content $Targets
$InstallString = "$Install $Arguments"

foreach ($Computer in $Computers) {
	Copy-Item "$Install" \\$Computer\c$\TEMP
	
	Invoke-Command -ComputerName $Computer -ScriptBlock {
		Start-Process "$InstallString"}
}
