Compare commits
5 Commits
ec9b44d8d5
...
e5bc1f76df
Author | SHA1 | Date | |
---|---|---|---|
e5bc1f76df | |||
cda29f2ef1 | |||
56bc398bf0 | |||
939ff159f5 | |||
f0ddf5ab5a |
100
.gitattributes
vendored
Normal file
100
.gitattributes
vendored
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# Common settings that generally should always be used with your language specific settings
|
||||||
|
|
||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
# https://www.davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
#
|
||||||
|
# The above will handle all files NOT found below
|
||||||
|
#
|
||||||
|
|
||||||
|
# Documents
|
||||||
|
*.bibtex text diff=bibtex
|
||||||
|
*.doc diff=astextplain
|
||||||
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
|
*.DOCX diff=astextplain
|
||||||
|
*.dot diff=astextplain
|
||||||
|
*.DOT diff=astextplain
|
||||||
|
*.pdf diff=astextplain
|
||||||
|
*.PDF diff=astextplain
|
||||||
|
*.rtf diff=astextplain
|
||||||
|
*.RTF diff=astextplain
|
||||||
|
*.md text diff=markdown
|
||||||
|
*.tex text diff=tex
|
||||||
|
*.adoc text
|
||||||
|
*.textile text
|
||||||
|
*.mustache text
|
||||||
|
*.csv text
|
||||||
|
*.tab text
|
||||||
|
*.tsv text
|
||||||
|
*.txt text
|
||||||
|
*.sql text
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
|
||||||
|
# Graphics
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.tif binary
|
||||||
|
*.tiff binary
|
||||||
|
*.ico binary
|
||||||
|
# SVG treated as an asset (binary) by default.
|
||||||
|
*.svg text
|
||||||
|
# If you want to treat it as binary,
|
||||||
|
# use the following line instead.
|
||||||
|
# *.svg binary
|
||||||
|
*.eps binary
|
||||||
|
|
||||||
|
# Scripts
|
||||||
|
*.bash text eol=lf
|
||||||
|
*.fish text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
# These are explicitly windows files and should use crlf
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
|
||||||
|
# web frontend stack -- force LF so SRI hashes are always correct
|
||||||
|
*.html text eol=lf
|
||||||
|
*.htm text eol=lf
|
||||||
|
*.css text eol=lf
|
||||||
|
*.min.css text eol=lf
|
||||||
|
*.js text eol=lf
|
||||||
|
*.min.js text eol=lf
|
||||||
|
*.php text eol=lf
|
||||||
|
|
||||||
|
# Visual Studio projects (Rider also)
|
||||||
|
*.cs diff=csharp
|
||||||
|
*.sln merge=union
|
||||||
|
*.csproj merge=union
|
||||||
|
*.vbproj merge=union
|
||||||
|
*.fsproj merge=union
|
||||||
|
*.dbproj merge=union
|
||||||
|
|
||||||
|
# Serialisation
|
||||||
|
*.json text
|
||||||
|
*.toml text
|
||||||
|
*.xml text
|
||||||
|
*.yaml text
|
||||||
|
*.yml text
|
||||||
|
|
||||||
|
# Archives
|
||||||
|
*.7z binary
|
||||||
|
*.gz binary
|
||||||
|
*.tar binary
|
||||||
|
*.tgz binary
|
||||||
|
*.zip binary
|
||||||
|
|
||||||
|
# Text files where line endings should be preserved
|
||||||
|
*.patch -text
|
||||||
|
|
||||||
|
#
|
||||||
|
# Exclude files from exporting
|
||||||
|
#
|
||||||
|
|
||||||
|
.gitattributes export-ignore
|
||||||
|
.gitignore export-ignore
|
||||||
|
.gitkeep export-ignore
|
||||||
|
.idea export-ignore
|
||||||
|
.vscode export-ignore
|
73
.gitignore
vendored
Normal file
73
.gitignore
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
### JetBrains template
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/**/usage.statistics.xml
|
||||||
|
.idea/**/dictionaries
|
||||||
|
.idea/**/shelf
|
||||||
|
|
||||||
|
# Generated files
|
||||||
|
.idea/**/contentModel.xml
|
||||||
|
|
||||||
|
# Sensitive or high-churn files
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
.idea/**/dbnavigator.xml
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# Gradle and Maven with auto-import
|
||||||
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
|
# auto-import.
|
||||||
|
# .idea/artifacts
|
||||||
|
# .idea/compiler.xml
|
||||||
|
# .idea/jarRepositories.xml
|
||||||
|
# .idea/modules.xml
|
||||||
|
# .idea/*.iml
|
||||||
|
# .idea/modules
|
||||||
|
# *.iml
|
||||||
|
# *.ipr
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
cmake-build-*/
|
||||||
|
|
||||||
|
# Mongo Explorer plugin
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
# File-based project format
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
# Editor-based Rest Client
|
||||||
|
.idea/httpRequests
|
||||||
|
|
||||||
|
# Android studio 3.1+ serialized cache file
|
||||||
|
.idea/caches/build_file_checksums.ser
|
||||||
|
|
13
.idea/.idea.ps-vpn-wol.dir/.idea/.gitignore
vendored
Normal file
13
.idea/.idea.ps-vpn-wol.dir/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/modules.xml
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/contentModel.xml
|
||||||
|
/.idea.ps-vpn-wol.iml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
6
.idea/.idea.ps-vpn-wol.dir/.idea/dictionaries
Normal file
6
.idea/.idea.ps-vpn-wol.dir/.idea/dictionaries
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectDictionaryState">
|
||||||
|
<dictionary name="asif" />
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/.idea.ps-vpn-wol.dir/.idea/indexLayout.xml
Normal file
8
.idea/.idea.ps-vpn-wol.dir/.idea/indexLayout.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
13
.idea/.idea.ps-vpn-wol.dir/.idea/vcs.xml
Normal file
13
.idea/.idea.ps-vpn-wol.dir/.idea/vcs.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CommitMessageInspectionProfile">
|
||||||
|
<profile version="1.0">
|
||||||
|
<inspection_tool class="BodyLimit" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="SubjectBodySeparation" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
|
<inspection_tool class="SubjectLimit" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
15
WOLDatabase.xml
Normal file
15
WOLDatabase.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<WOLDatabase>
|
||||||
|
<Configuration>
|
||||||
|
<BroadcastAddress>127.0.0.1</BroadcastAddress>
|
||||||
|
<Port>7</Port>
|
||||||
|
<DnsSuffix>.internal.mydomain.net</DnsSuffix>
|
||||||
|
</Configuration>
|
||||||
|
<Computers>
|
||||||
|
<Computer name="reception01" friendlyName="Front-desk computer" mac="aa:00:00:00:00:01"/>
|
||||||
|
<Computer name="accounting01" friendlyName="accounting workstation 1" mac="bb:00:00:00:00:01"/>
|
||||||
|
<Computer name="accounting02" friendlyName="" mac="bb:00:00:00:00:02"/>
|
||||||
|
<Computer name="manager01" friendlyName="management workstation 1" mac="cc:00:00:00:00:01"/>
|
||||||
|
<Computer name="tech" friendlyName="I.T. technician workstation" mac="ff:ff:ff:ff:ff:01"/>
|
||||||
|
</Computers>
|
||||||
|
</WOLDatabase>
|
114
wakeup.ps1
Normal file
114
wakeup.ps1
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<#
|
||||||
|
#>
|
||||||
|
|
||||||
|
param
|
||||||
|
(
|
||||||
|
# Computer to wake up
|
||||||
|
[Alias("Computer")]
|
||||||
|
[String]
|
||||||
|
$targetComputer = "",
|
||||||
|
# Skip RDP connectivity readiness check
|
||||||
|
[Alias("Check", "Readiness")]
|
||||||
|
[Switch]
|
||||||
|
$ConnectivityCheck = $false,
|
||||||
|
# RDP connectivity readiness check timeout
|
||||||
|
[Int]
|
||||||
|
$Timeout = 300
|
||||||
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# read database and assemble list of target computers
|
||||||
|
[xml]$db = Get-Content -Path $wolDatabase
|
||||||
|
$broadcastIP = $db.WOLDatabase.Configuration.BroadcastAddress
|
||||||
|
$port = $db.WOLDatabase.Configuration.Port
|
||||||
|
$dnsSuffix = $db.WOLDatabase.Configuration.DnsSuffix
|
||||||
|
$targetComputers = [System.Collections.Generic.List[PSObject]]::new()
|
||||||
|
$db.WOLDatabase.Computers.Computer | Where-Object { $_.name -match "$targetComputer" } | ForEach-Object { $targetComputers.Add($_) }
|
||||||
|
$removeFromTargetComputers = [System.Collections.Generic.List[String]]::new()
|
||||||
|
|
||||||
|
# send WOL magic packets
|
||||||
|
$targetComputers | ForEach-Object {
|
||||||
|
$wolError = @()
|
||||||
|
$name = $_.name
|
||||||
|
$friendlyName = $_.friendlyName
|
||||||
|
if ( [String]::IsNullOrWhiteSpace($friendlyName))
|
||||||
|
{
|
||||||
|
Write-Host "Processing request to wake-up '$name'... " -NoNewline
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host "Processing request to wake-up '$friendlyName'... " -NoNewline
|
||||||
|
}
|
||||||
|
|
||||||
|
# send magic packet
|
||||||
|
$_.mac | Send-MagicPacket -BroadcastIP $broadcastIP -Port $port -ErrorAction SilentlyContinue -ErrorVariable +wolError
|
||||||
|
if ($wolError.Count -eq 0)
|
||||||
|
{
|
||||||
|
Write-Host -ForegroundColor Green "[OK]"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Write-Host -ForegroundColor Red "[ERROR]"
|
||||||
|
$removeFromTargetComputers.Add($name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove computers from targetComputers if WOL packet was not successfully sent
|
||||||
|
$removeFromTargetComputers | ForEach-Object {
|
||||||
|
$removeName = $_
|
||||||
|
$targetComputers.Remove(($targetComputers | Where-Object { $_.name -eq $removeName })) | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# process RDP readiness check
|
||||||
|
$targetComputers
|
||||||
|
|
||||||
|
Exit 0
|
Loading…
Reference in New Issue
Block a user