Sample Codes
Change Modified Date of All file in a folder
Get-ChildItem s1 | foreach {
$item=$(Get-Item $_.FullName)
Set-ItemProperty -path $item -Name LastWriteTime -Value $(Get-Date).AddHours(-5)
}
Test Ntework Connection
param (
[switch]$NoUser,
[int]$Interval = 20,
[string]$AdditionalAddressList="10.1.1.1,11.1.1.1",
[switch]$NoFileLog,
[string]$LogFile = "output.txt",
[string]$DNSCheckHost = "google.com"
)
if ($args.Count -eq 0) {
Write-Host "Testing network connection..."
Write-Host "Use -h option for additional parameters and help."
Write-Host
}
if ($args -contains '-h') {
Write-Host "Usage: .\YourScript.ps1 [-NoUser] [-Interval <seconds>] [-AdditionalAddressList <list>] [-NoFileLog] [-LogFile <path>]"
Write-Host ""
Write-Host "Parameters:"
Write-Host " -NoUser Do not log user name"
Write-Host " -Interval <seconds> Set interval between checks (default: 20 seconds)."
Write-Host " -AdditionalAddressList Comma-separated list of addresses to ping."
Write-Host " -NoFileLog Disable logging to file."
Write-Host " -LogFile <path> Specify log file path (default: output.txt)."
Write-Host " -DNSCheckHost <FQDN> Specify FQDN of host to check DNS resolution"
Write-Host ""
Write-Host "Examples:"
Write-Host " .\YourScript.ps1 -Interval 30 -AdditionalAddressList '8.8.8.8, bing.com'"
Write-Host " .\YourScript.ps1 -NoUser -LogFile 'netlog.txt'"
Write-Host " .\YourScript.ps1 -NoUser -NoFileLog"
Write-Host " .\YourScript.ps1 -DNSCheckHost google.com"
Write-Host " .\YourScript.ps1 -h"
exit
}
# Additional Test Address
$AdditionalAddresses = @()
if ($AdditionalAddressList) {
$AdditionalAddresses = $AdditionalAddressList -split ',' | ForEach-Object { $_.Trim() }
}
function Write-Log {
param (
[string]$message,
[ConsoleColor]$ForegroundColor = 'White' # Default color
)
$logdate=$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
if (-not $NoFileLog) {
Add-Content -Path $logFile -Value "$logdate - $message"
}
Write-Host "$logdate - $message" -ForegroundColor $ForegroundColor
}
while ($true) {
# Get current user info unless -NoUser is specified
if ($NoUser) {
$output = "Computer: $env:COMPUTERNAME"
} else {
$output = "Computer: $env:COMPUTERNAME - User: $env:USERDOMAIN\$env:USERNAME"
}
Write-Log $output
# Header for adapter info
$header = "{0,-20} {1,-40} {2,-10} {3,-10} {4,-15} {5,-17}" -f "Name", "Description", "Status", "Speed", "IP Address", "MAC Address"
Write-Log $header
# Get active adapters
$adapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
foreach ($adapter in $adapters) {
$ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | Where-Object { $_.AddressFamily -eq "IPv4" }
foreach ($ip in $ipInfo) {
$line = "{0,-20} {1,-40} {2,-10} {3,-10} {4,-15} {5,-17}" -f $adapter.Name, $adapter.InterfaceDescription, $adapter.Status, $adapter.LinkSpeed, $ip.IPAddress, $adapter.MacAddress
Write-Log $line
}
}
foreach ($adapter in $adapters) {
#$ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | Where-Object { $_.AddressFamily -eq "IPv4" }
$gwInfo = Get-NetRoute -InterfaceIndex $adapter.InterfaceIndex | Where-Object { $_.DestinationPrefix -eq "0.0.0.0/0" }
#Write-Host $gwInfo.NextHop
$dnsInfo = Get-DnsClientServerAddress -InterfaceIndex $adapter.InterfaceIndex #| Where-Object { $_.AddressFamily -eq "IPv4" }
#Write-Host $dnsInfo.ServerAddresses
# Add default gateway to address list
foreach ($gw in $gwInfo) {
if ($gw.NextHop -ne "0.0.0.0") {
$gateway=$gw.NextHop
$pingResult = Test-Connection -ComputerName $gateway -Count 1 -Quiet
if ($pingResult) {
$successMsg = "Ping to gateway $gateway successful."
Write-Log $successMsg -ForegroundColor Green
} else {
$failMsg = "Ping to gateway $gateway failed. Firewall may block ping though."
Write-Log $failMsg -ForegroundColor Red
}
}
}
# Add DNS servers to address list
foreach ($dns in $dnsInfo.ServerAddresses) {
$pingResult = Test-Connection -ComputerName $dns -Count 1 -Quiet
if ($pingResult) {
$successMsg = "Ping to dns server $dns successful."
Write-Log $successMsg -ForegroundColor Green
} else {
$failMsg = "Ping to dns server $dns failed. Firewall may block ping though."
Write-Log $failMsg -ForegroundColor Red
}
}
# Try resolving using each DNS server until one succeeds
foreach ($dns in $dnsInfo.ServerAddresses) {
try {
$resolveResult = Resolve-DnsName -Name $DNSCheckHost -Server $dns -ErrorAction Stop
if ($resolveResult) {
$successMsg = "DNS resolution for $DNSCheckHost using server $dns succeeded."
Write-Log $successMsg -ForegroundColor Green
break
}
} catch {
$failMsg = "DNS resolution for $DNSCheckHost using server $dns failed."
Write-Log $failMsg -ForegroundColor Red
}
}
foreach ($address in $AdditionalAddresses) {
# Check if the address is an IP address using regex
if ($address -match '^\d{1,3}(\.\d{1,3}){3}$') {
# It's an IPv4 address, skip DNS resolution
$ping = Test-Connection -ComputerName $address -Count 1 -Quiet
if ($ping) {
$successMsg = "Ping to $address successful."
Write-Log $successMsg -ForegroundColor Green
} else {
$failMsg = "Ping to $address failed. Firewall may block ping though."
Write-Log $failMsg -ForegroundColor Red
}
} else {
# It's a DNS name, resolve first
try {
$dnsResults = Resolve-DnsName -Name $address -ErrorAction Stop
$aRecords = $dnsResults | Where-Object { $_.Type -eq 'A' }
if ($aRecords.Count -eq 0) {
$noARecordMsg = "DNS resolution for $address succeeded, but no A records were found."
Write-Log $noARecordMsg -ForegroundColor Yellow
} else {
foreach ($result in $aRecords) {
$ip = $result.IPAddress
$ping = Test-Connection -ComputerName $ip -Count 1 -Quiet
if ($ping) {
$successMsg = "Ping to $address ($ip) successful."
Write-Log $successMsg -ForegroundColor Green
} else {
$failMsg = "Ping to $address ($ip) failed. Firewall may block ping though."
Write-Log $failMsg -ForegroundColor Red
}
}
}
} catch {
$errorMsg = "DNS resolution failed for $address. Error: $_"
Write-Log $errorMsg -ForegroundColor Yellow
}
}
}
}
Write-Host ""
Start-Sleep -Seconds $Interval
}Last updated