92 lines
2.4 KiB
PowerShell
92 lines
2.4 KiB
PowerShell
<#
|
|
#>
|
|
|
|
param
|
|
(
|
|
# Computer to wake up
|
|
[Alias("Computer")]
|
|
[String]
|
|
$targetComputer = ""
|
|
)
|
|
|
|
function exitError($errMessage, $PSItem, $exitCode = 1)
|
|
{
|
|
if ( [String]::IsNullOrEmpty($errMessage))
|
|
{
|
|
Write-Host -ForegroundColor Red "`n`rABNORMAL EXIT: exitError function called without exit message!`n`r"
|
|
exit 99
|
|
}
|
|
Write-Host -ForegroundColor Red "`r`nERROR: ${errMessage}."
|
|
if ($PSItem)
|
|
{
|
|
Write-Host -ForegroundColor Red "`r`nAdditional information:`r`n$PSItem"
|
|
}
|
|
Write-Host
|
|
Exit $exitCode
|
|
}
|
|
|
|
$wolModuleName = "wol-magicPacket"
|
|
$wolDatabase = "WOLDatabase.xml"
|
|
|
|
# exit on error if Send-MagicPacket module is not loaded
|
|
if (!(Get-Module -Name $wolModuleName))
|
|
{
|
|
try
|
|
{
|
|
Import-Module -Name $wolModuleName -ErrorAction Stop
|
|
}
|
|
catch
|
|
{
|
|
$errMessage = "Unable to load '$wolModuleName'"
|
|
exitError $errMessage $PSItem
|
|
}
|
|
}
|
|
|
|
# exit if database cannot be found/read
|
|
if (!(Test-Path -Path $wolDatabase -PathType Leaf))
|
|
{
|
|
$errMessage = "Unable to find or read Wake-On-LAN database file ($wolDatabase)"
|
|
exitError $errMessage
|
|
}
|
|
|
|
# get target computer name if not already specified
|
|
if ( [String]::IsNullOrWhiteSpace($targetComputer))
|
|
{
|
|
do
|
|
{
|
|
$targetComputer = Read-Host -Prompt 'Computer to wake-up'
|
|
} while ( [String]::IsNullOrWhiteSpace($targetComputer))
|
|
Write-Host
|
|
}
|
|
|
|
# find computer in database
|
|
[xml]$db = Get-Content -Path $wolDatabase
|
|
$broadcastIP = $db.WOLDatabase.Configuration.BroadcastAddress
|
|
$port = $db.WOLDatabase.Configuration.Port
|
|
$dnsSuffix = $db.WOLDatabase.Configuration.DnsSuffix
|
|
|
|
$db.WOLDatabase.Computers.Computer | Where-Object { $_.name -match "$targetComputer" } | ForEach-Object {
|
|
if ( [String]::IsNullOrWhiteSpace($_.friendlyName))
|
|
{
|
|
$name = $_.name
|
|
Write-Host "Processing request to wake-up '$name'... " -NoNewline
|
|
}
|
|
else
|
|
{
|
|
$friendlyName = $_.friendlyName
|
|
Write-Host "Processing request to wake-up '$friendlyName'... " -NoNewline
|
|
}
|
|
|
|
# send magic packet
|
|
$_.mac | Send-MagicPacket -BroadcastIP $broadcastIP -Port $port -WarningAction SilentlyContinue -WarningVariable wolErr -ErrorAction SilentlyContinue -ErrorVariable wolErr
|
|
if ($wolErr.Count -eq 0)
|
|
{
|
|
Write-Host -ForegroundColor Green "[OK]"
|
|
}
|
|
else
|
|
{
|
|
Write-Host -ForegroundColor Red "[ERROR]"
|
|
}
|
|
}
|
|
|
|
Exit 0 |