WizardKit/Scripts/servers.ps1
Alan Mason 919c4e73a2 2016-04: Retroactive Updates
* Finished code for 32-bit and 64-bit builds
  * Unified scripts for use under both builds
2017-11-24 21:01:27 -08:00

85 lines
2.8 KiB
PowerShell

# WK server functions
## Init ##
$wd = $(Split-Path $MyInvocation.MyCommand.Path)
pushd "$wd"
. .\init.ps1
# Variables
$source_server = "10.0.0.10"
$backup_servers = @(
@{ "ip"="10.0.0.10";
"letter"="Z";
"name"="ServerOne";
"path"="Backups"},
@{ "ip"="10.0.0.11";
"name"="ServerTwo";
"letter"="Y";
"path"="Backups"}
)
$backup_user = "backup"
$backup_pass = "Abracadabra"
# Functions
function select-server {
# Check for available servers
$avail_servers = @(Get-PSDrive | Where-Object {$_.DisplayRoot -imatch '\\\\'})
if ($avail_servers.count -eq 0) {
wk-error "No suitable backup servers were detected."
return $false
}
# Build menu and get selection
$selection = $null
$main_set = @()
foreach ($server in $avail_servers) {
$_entry = "{0} ({1} free)" -f $server.Description, (human-size $server.Free)
$main_set += @{Name=$_entry}
}
$actions = @(@{Name="Main Menu"; Letter="M"})
$selection = (menu-select "Where are we saving the backup image(s)?" $main_set $actions)
if ($selection -imatch '^\d+$') {
$selection -= 1
return $avail_servers[$selection]
}
return $selection
}
function mount-servers {
# Mount servers
wk-write "Connecting to backup server(s)"
foreach ($_server in $backup_servers) {
if (test-connection $_server.ip -count 3 -quiet) {
try {
$_path = "\\{0}\{1}" -f $_server.ip, $_server.path
$_drive = "{0}:" -f $_server.letter
net use $_drive "$_path" /user:$backup_user $backup_pass | Out-Null
wk-write ("`t{0} server: mounted" -f $_server.name)
# Add friendly description
$_regex = "^{0}$" -f $_server.letter
(Get-PSDrive | Where-Object {$_.Name -imatch $_regex}).Description = $_server.name
} catch {
wk-warn ("`t{0} server: failed" -f $_server.name)
}
} else {
wk-warn ("`t{0} server: timed-out" -f $_server.name)
}
}
}
function unmount-servers {
# Unmount servers
wk-write "Disconnecting from backup server(s)"
$mounted_servers = @(Get-PSDrive | Where-Object {$_.DisplayRoot -imatch '\\\\'})
foreach ($_server in $mounted_servers) {
try {
$_drive = "{0}:" -f $_server.Name
net use $_drive /delete | Out-Null
#wk-warn ("`t{0} server: unmounted" -f $_server.name)
wk-warn "`tServer: unmounted"
} catch {
#wk-warn ("`t{0} server: failed" -f $_server.name)
wk-warn "`tServer: failed"
}
}
}