struct(wakeup): basic WOL invocation script
- generate dummy database of computers - basic script to wake up computers found in database
This commit is contained in:
		
							parent
							
								
									f0ddf5ab5a
								
							
						
					
					
						commit
						939ff159f5
					
				| @ -1,28 +1,15 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <WOLDatabase> | ||||
|     <Computer | ||||
|             name="reception01" | ||||
|             description="Front-desk computer" | ||||
|             mac="aa:00:00:00:00:01" | ||||
|     /> | ||||
|     <Computer | ||||
|             name="accounting01" | ||||
|             description="accounting workstation 1" | ||||
|             mac="bb:00:00:00:00:01" | ||||
|     /> | ||||
|     <Computer | ||||
|             name="accounting02" | ||||
|             description="accounting workstation 2" | ||||
|             mac="bb:00:00:00:00:02" | ||||
|     /> | ||||
|     <Computer | ||||
|             name="manager01" | ||||
|             description="management workstation 1" | ||||
|             mac="cc:00:00:00:00:01" | ||||
|     /> | ||||
|     <Computer | ||||
|             name="techstation" | ||||
|             description="I.T. technician workstation" | ||||
|             mac="ff:ff:ff:ff:ff:01" | ||||
|     /> | ||||
|     <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> | ||||
							
								
								
									
										92
									
								
								wakeup.ps1
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								wakeup.ps1
									
									
									
									
									
								
							| @ -0,0 +1,92 @@ | ||||
| <# | ||||
| #> | ||||
| 
 | ||||
| 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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user