85 lines
2.8 KiB
PowerShell
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"
|
|
}
|
|
}
|
|
}
|