diff --git a/README.md b/README.md
index d3b0bb0b..4d310e93 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,9 @@ List of Scripts
---------------
The following PowerShell scripts can be found in the [Scripts/](Scripts/) subfolder:
+* [check-ipv4-address.ps1](Scripts/check-ipv4-address.ps1) - checks the given IPv4 address for validity
+* [check-mac-address.ps1](Scripts/check-mac-address.ps1) - checks the given MAC address for validity
+* [check-xml-file.ps1](Scripts/check-xml-file.ps1) - checks the given XML file for validity
* [clone-repos.ps1](Scripts/clone-repos.ps1) - clones well-known Git repositories
* [configure-git.ps1](Scripts/configure-git.ps1) - sets up the Git configuration
* [download.ps1](Scripts/download.ps1) - downloads the file/directory from the given URL
@@ -54,7 +57,6 @@ The following PowerShell scripts can be found in the [Scripts/](Scripts/) subfol
* [translate-file.ps1](Scripts/translate-file.ps1) - translates the given file from source to target language
* [translate-text.ps1](Scripts/translate-text.ps1) - translates the given text into other languages
* [txt2wav.ps1](Scripts/txt2wav.ps1) - converts text into a audio .WAV file
-* [validate-xml.ps1](Scripts/validate-xml.ps1) - validates the given XML file
* [weather.ps1](Scripts/weather.ps1) - prints the current weather forecast
* [weather-alert.ps1](Scripts/weather-alert.ps1) - checks the current weather for critical values
* [weather-report.ps1](Scripts/weather-report.ps1) - prints the local weather report
diff --git a/Scripts/check-ipv4-address.ps1 b/Scripts/check-ipv4-address.ps1
new file mode 100755
index 00000000..0bfaa713
--- /dev/null
+++ b/Scripts/check-ipv4-address.ps1
@@ -0,0 +1,28 @@
+#!/snap/bin/powershell
+
+# Syntax: ./check-ipv4-address.ps1 [
]
+# Description: checks the given IPv4 address for validity
+# Author: Markus Fleschutz
+# Source: github.com/fleschutz/PowerShell
+# License: CC0
+
+param([string]$Addr)
+
+# IPv4-Address like 192.168.178.1
+$RegEx = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
+
+try {
+ if ($Addr -eq "" ) {
+ $Addr = read-host "Enter IPv4 address to validate"
+ }
+ if ($Addr -match $RegEx) {
+ write-output "IPv4 address $Addr is valid"
+ exit 0
+ } else {
+ write-output "IPv4 address $Addr is NOT valid"
+ exit 1
+ }
+} catch {
+ write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
+ exit 1
+}
diff --git a/Scripts/check-mac-address.ps1 b/Scripts/check-mac-address.ps1
new file mode 100755
index 00000000..476bfa8c
--- /dev/null
+++ b/Scripts/check-mac-address.ps1
@@ -0,0 +1,28 @@
+#!/snap/bin/powershell
+
+# Syntax: ./check-mac-address.ps1 []
+# Description: checks the given MAC address for validity
+# Author: Markus Fleschutz
+# Source: github.com/fleschutz/PowerShell
+# License: CC0
+
+param([string]$MAC)
+
+# MAC-Address like 00:00:00:00:00:00 or 00-00-00-00-00-00 or 000000000000
+$RegEx = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})|([0-9A-Fa-f]{2}){6}$"
+
+try {
+ if ($MAC -eq "" ) {
+ $MAC = read-host "Enter MAC address to validate"
+ }
+ if ($MAC -match $RegEx) {
+ write-output "MAC address $MAC is valid"
+ exit 0
+ } else {
+ write-output "MAC address $MAC is NOT valid"
+ exit 1
+ }
+} catch {
+ write-error "ERROR in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
+ exit 1
+}
diff --git a/Scripts/check-xml-file.ps1 b/Scripts/check-xml-file.ps1
new file mode 100755
index 00000000..b3220649
--- /dev/null
+++ b/Scripts/check-xml-file.ps1
@@ -0,0 +1,41 @@
+#!/snap/bin/powershell
+
+# Syntax: ./check-xml-file []
+# Description: checks the given XML file for validity
+# Author: Markus Fleschutz
+# Source: github.com/fleschutz/PowerShell
+# License: CC0
+
+param ([String]$XmlFilePath)
+
+try {
+ if ($XmlFilePath -eq "" ) {
+ $XmlFilePath = read-host "Enter path to XML file"
+ }
+ # Get the file
+ $XmlFile = Get-Item($XmlFilePath)
+
+ # Keep count of how many errors there are in the XML file
+ $script:ErrorCount = 0
+
+ # Perform the XSD Validation
+ $ReaderSettings = New-Object -TypeName System.Xml.XmlReaderSettings
+ $ReaderSettings.ValidationType = [System.Xml.ValidationType]::Schema
+ $ReaderSettings.ValidationFlags = [System.Xml.Schema.XmlSchemaValidationFlags]::ProcessInlineSchema -bor [System.Xml.Schema.XmlSchemaValidationFlags]::ProcessSchemaLocation
+ $ReaderSettings.add_ValidationEventHandler({ $script:ErrorCount++ })
+ $Reader = [System.Xml.XmlReader]::Create($XmlFile.FullName, $ReaderSettings)
+ while ($Reader.Read()) { }
+ $Reader.Close()
+
+ # Verify the results of the XSD validation
+ if ($script:ErrorCount -gt 0) {
+ write-output "XML file is NOT valid"
+ exit 1
+ } else {
+ write-output "XML file is valid"
+ exit 0
+ }
+} catch {
+ write-warning "$($MyInvocation.MyCommand.Name) - Error: $($_.Exception.Message) - Line Number: $($_.InvocationInfo.ScriptLineNumber)"
+ exit 1
+}
diff --git a/Scripts/validate-xml.ps1 b/Scripts/validate-xml.ps1
deleted file mode 100755
index 7c6c8b7a..00000000
--- a/Scripts/validate-xml.ps1
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/snap/bin/powershell
-
-function Validate-Xml {
- param ([string]$XmlFilePath)
- try {
- # Get the file
- $XmlFile = Get-Item($XmlFilePath)
-
- # Keep count of how many errors there are in the XML file
- $script:ErrorCount = 0
-
- # Perform the XSD Validation
- $ReaderSettings = New-Object -TypeName System.Xml.XmlReaderSettings
- $ReaderSettings.ValidationType = [System.Xml.ValidationType]::Schema
- $ReaderSettings.ValidationFlags = [System.Xml.Schema.XmlSchemaValidationFlags]::ProcessInlineSchema -bor [System.Xml.Schema.XmlSchemaValidationFlags]::ProcessSchemaLocation
- $ReaderSettings.add_ValidationEventHandler({ $script:ErrorCount++ })
- $Reader = [System.Xml.XmlReader]::Create($XmlFile.FullName, $ReaderSettings)
- while ($Reader.Read()) { }
- $Reader.Close()
-
- # Verify the results of the XSD validation
- if ($script:ErrorCount -gt 0) {
- # XML is NOT valid
- $false
- } else {
- # XML is valid
- $true
- }
- } catch {
- Write-Warning "$($MyInvocation.MyCommand.Name) - Error: $($_.Exception.Message) - Line Number: $($_.InvocationInfo.ScriptLineNumber)"
- }
-}