Run as Administrator in Powershell ISE
Change -Count for faster pinging
# Define the base IP and subnet$baseIP="10.88.18."$startRange=1$endRange=254# Loop through all possible IPs in the subnetfor ($i=$startRange; $i-le$endRange; $i++) { $currentIP="$baseIP$i"# Test the connection (ping) and select only the StatusCode property$pingResult=Test-Connection-ComputerName $currentIP-Count 1-Quiet # Check if the ping was successfulif ($pingResult) { Write-Output"$currentIP is reachable." } else { Write-Output"$currentIP is not reachable." } }
This file stores your credentials securely and can only be decrypted by the same user on the same machine.
Change IPaddress
# Path to the file containing the list of IP addresses$ipFilePath="C:\path\to\ip.txt"# Read the IP addresses from the file into a variable$computers=Get-Content$ipFilePath# Prompt for credentials to connect to the remote machines$credential=Get-Credential# Loop through each IP address and restart themforeach ($computerin$computers) { try { # Print message to indicate restart is startingWrite-Host"Attempting to restart $computer..."# Restart the computer using the IP addressRestart-Computer-ComputerName $computer-Force -Credential $credential-ErrorAction Stop # Print success messageWrite-Host"$computer has been successfully restarted." } catch { # Print error message if restart failsWrite-Host"Failed to restart $computer. Error: $_"-ForegroundColor Red } } # Final messageWrite-Host"All restart commands have been sent."
This script will restart Computer1, Computer2, and Computer3 immediately (/r for restart, /t 0 to restart with no delay).
Change IPaddress
# Path to the file containing the list of IP addresses$ipFilePath="C:\path\to\ip.txt"# Read the IP addresses from the file into a variable$computers=Get-Content$ipFilePath# Prompt for credentials to connect to the remote machines$credential=Get-Credential# Loop through each IP address and shut them downforeach ($computerin$computers) { try { # Print message to indicate shutdown is startingWrite-Host"Attempting to shut down $computer..."# Shut down the computer using the IP addressStop-Computer-ComputerName $computer-Force -Credential $credential-ErrorAction Stop # Print success messageWrite-Host"$computer has been successfully shut down." } catch { # Print error message if shutdown failsWrite-Host"Failed to shut down $computer. Error: $_"-ForegroundColor Red } } # Final messageWrite-Host"All shutdown commands have been sent."
This script will shutdown the PC mentioned in the IP.txt files immediately.
Find the IP address and populate the ARP table
Change lines 3,4 : ” $startRange = 1 $endRange = 254” range if you estimate the range and save time Change line 2 : ” $baseIP = “10.88.18.” for appropriate network.
# Output file path$outputFile="C:\Users\Octopus\Desktop\NetworkDevices.csv"# Initialize an empty array to store results$networkDevices=@() # Run the arp command and capture the output$arpTable= arp -a -N 10.88.18.__# Parse the output to extract IP and MAC addresses$arpTable|ForEach-Object { if ($_-match"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([a-fA-F0-9-]{17})") { $macAddress=$matches[2] -replace"-",":"$device= [PSCustomObject]@{ IP=$matches[1] MACAddress=$macAddress } $networkDevices+=$device } } # Export the results to a CSV file$networkDevices|Export-Csv-Path $outputFile-NoTypeInformation Write-Host"IP and MAC addresses have been saved to $outputFile"
This Script pings each IP once; you can modify the-Countparameter to increase the number of ping attempts. The Script will not ping the network and broadcast addresses (10.88.18.0and10.88.18.255)which are typically not assigned to hosts.# Define the path to the IP addresses file$ipListFile="C:\Users\Helheim\Desktop\ip_addresses.txt"# Read the IP addresses from the file$ipAddresses=Get-Content-Path $ipListFile# Define the username and password$username=""$password=""# Open RDP for each IP addressforeach ($ipin$ipAddresses) { # Create a secure string for the password$securePassword=ConvertTo-SecureString$password-AsPlainText -Force # Create a credential object$credential=New-Object System.Management.Automation.PSCredential($username,$securePassword) # Start RDP session mstsc /v:$ip }
This script will start the RDP-GUI connection with Username and Password given..
Copy and paste this Powershell script to each till and execute.
Nothing to Change
# Get the current computer's device name (hostname)$deviceName= [System.Net.Dns]::GetHostName() Write-Host"Device Name: $deviceName"# Define the IP configuration based on the device name format "NLUK0XXXXT0YY"if ($deviceName-match"^NLUK0(\d{4})T0(\d{2})$") { $xxxx=$matches[1] # Extract the 4-digit XXXX$yy= [int]$matches[2] # Convert YY to an integer to remove leading zeros# Construct the static IP based on the format 10.XX.XX.YY$xx1= [int]$xxxx.Substring(0,2) # First two digits of XXXX$xx2= [int]$xxxx.Substring(2,2) # Last two digits of XXXX$staticIP="10.$xx1.$xx2.$yy"$subnetMask="255.255.255.0"$defaultGateway="10.$xx1.$xx2.100"$preferredDNS="10.96.200.170"$alternateDNS="10.80.205.18"# Get all active adapters and select the top active one$ethernetAdapter=Get-NetAdapter|Where-Object { $_.Status-eq"Up" } |Select-Object-First 1if ($ethernetAdapter) { $interfaceIndex=$ethernetAdapter.ifIndexWrite-Host"Using Adapter: $($ethernetAdapter.Name), Interface Index: $interfaceIndex"# Check if the IP already exists on the interface$existingIP=Get-NetIPAddress-InterfaceIndex $interfaceIndex-AddressFamily IPv4 -ErrorAction SilentlyContinue |Where-Object { $_.IPAddress-eq$staticIP } if ($existingIP) { Write-Host"Removing existing IP address: $($existingIP.IPAddress)"Remove-NetIPAddress-InterfaceIndex $interfaceIndex-IPAddress $existingIP.IPAddress-Confirm:$false-ErrorAction Stop } # Set the static IP address, subnet mask, and default gateway for the adapterWrite-Host"Setting Static IP: $staticIP"New-NetIPAddress-InterfaceIndex $interfaceIndex-IPAddress $staticIP-PrefixLength 24-DefaultGateway $defaultGateway-ErrorAction Stop # Set the preferred and alternate DNS serversWrite-Host"Setting DNS Servers: $preferredDNS, $alternateDNS"Set-DnsClientServerAddress-InterfaceIndex $interfaceIndex-ServerAddresses $preferredDNS,$alternateDNS-ErrorAction Stop Write-Host"Static IP configuration applied to adapter: $($ethernetAdapter.Name) with IP: $staticIP" } else { Write-Host"No active network adapter found on $deviceName" } } else { Write-Host"Device name does not match the required format: NLUK0XXXXT0YY" }
This Script will does the static IP of PC and it will disconnect from RDP.
Copy and paste this Powershell script to each server and execute.
Nothing to Change
# Get the current server's device name (hostname)$deviceName= (Get-ComputerInfo).CsName # Define the regex pattern to extract XXXX from the device name "NLUK0XXXXW001"if ($deviceName-match"^NLUK0(\d{4})W001$") { $xxxx=$matches[1] # Extract the XXXX part# Split XXXX into two parts$xx1= [int]$xxxx.Substring(0,2) # Convert first two digits to integer to remove leading zeros$xx2= [int]$xxxx.Substring(2,2) # Convert last two digits to integer to remove leading zeros$y=52# Fixed last octet# Construct the static IP based on the format 10.XX1.XX2.Y$staticIP="10.$xx1.$xx2.$y"$subnetMask="255.255.255.0"$defaultGateway="10.$xx1.$xx2.100"# Default gateway ending in .100$preferredDNS="10.96.200.170"$alternateDNS="10.80.205.18"if ($ethernetAdapter) { $interfaceIndex=$ethernetAdapter.ifIndexWrite-Host"Using Adapter: $($ethernetAdapter.Name), Interface Index: $interfaceIndex"# Check if the IP already exists on the interface$existingIP=Get-NetIPAddress-InterfaceIndex $interfaceIndex-AddressFamily IPv4 -ErrorAction SilentlyContinue |Where-Object { $_.IPAddress-eq$staticIP } if ($existingIP) { Write-Host"Removing existing IP address: $($existingIP.IPAddress)"Remove-NetIPAddress-InterfaceIndex $interfaceIndex-IPAddress $existingIP.IPAddress-Confirm:$false-ErrorAction Stop } # Set the static IP address, subnet mask, and default gateway for the Ethernet adapterNew-NetIPAddress-InterfaceIndex $interfaceIndex-IPAddress $staticIP-PrefixLength 24-DefaultGateway $defaultGateway# Set the preferred and alternate DNS serversSet-DnsClientServerAddress-InterfaceIndex $interfaceIndex-ServerAddresses $preferredDNS,$alternateDNSWrite-Host"Static IP configuration applied: $staticIP on device $deviceName" } else { Write-Host"No active Ethernet adapter found on $deviceName" } } else { Write-Host"Device name does not match the required format: NLUK0XXXXW001" }
This Script will does the static IP of server and it will disconnect from RDP.
Run this script with ADMIN privileges.
SetupPrerequisite.ps1
# Check if running as AdministratorIf (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Warning"You do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!"exit } # Install ImportExcel moduleWrite-Host"Installing ImportExcel module..."Install-Module-Name ImportExcel -Scope CurrentUser -Force -Confirm:$false-SkipPublisherCheck # Install Selenium moduleWrite-Host"Installing Selenium module..."Install-Module-Name Selenium -Scope CurrentUser -Force -Confirm:$false-SkipPublisherCheck # Download Microsoft Edge WebDriverWrite-Host"Downloading Microsoft Edge WebDriver..."$webDriverUrl="https://msedgedriver.azureedge.net/114.0.1823.79/edgedriver_win64.zip"$outputPath="C:\WebDriver"$outputFile="$outputPath\edgedriver.zip"# Create directory for WebDriver if it doesn't existif (-Not (Test-Path-Path $outputPath)) { New-Item-ItemType Directory -Path $outputPath } Invoke-WebRequest-Uri $webDriverUrl-OutFile $outputFileWrite-Host"Extracting WebDriver..."Expand-Archive-Path $outputFile-DestinationPath $outputPath-Force # Add WebDriver to system PATH$env:Path+=";$outputPath" [System.Environment]::SetEnvironmentVariable("Path",$env:Path, [System.EnvironmentVariableTarget]::Machine) Write-Host"Setup completed successfully!"
This output should you get!
For installing Prerequisite on the desired IP address (always modify the file NetworkDevices.csv )
It is easy to put all the files in one folder.Change line 4: path toNetworkDevices.csvChange line 8: path toprerequisite.ps1Change line 11: path tocredentials.xml# Import the ImportExcel moduleImport-Module ImportExcel # Path to the Excel file$excelFilePath="C:\path\to\NetworkDevices.csv"# Path to the setup script$setupScriptPath="C:\path\to\prerequisite.ps1"# Path to the credentials file$credFilePath="C:\path\to\credentials.xml"# Import credentials$cred=Import-CliXml-Path $credFilePath# Read the IP addresses from the Excel file$ipAddresses=Import-Excel-Path $excelFilePath|Select-Object-ExpandProperty IP # Loop through each IP address and run the setup scriptforeach ($ipin$ipAddresses) { Write-Host"Deploying to $ip..."Invoke-Command-ComputerName $ip-Credential $cred-ScriptBlock { param($setupScriptPath) # Ensure the execution policy is setSet-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force # Execute the setup script&$setupScriptPath } -ArgumentList $setupScriptPath-ErrorAction Stop } Write-Host"Deployment completed on all machines."
Script reads the IP addresses from the Excel file :NetworkDevices.csv, retrieves the stored“IP_address”, and executesprerequisite.ps1on each remote machine.
- Open PowerShell as an administrator.
- Execute the deployment script:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
.\PreDeployScript.ps1- Credentials: Stored securely in
credentials.xmlfor remote access. - Setup Script:
prerequisite.ps1installs necessary modules. - Deployment Script:
PreDeployScript.ps1automates the execution ofprerequisite.ps1on each machine listed in the Excel file using the stored credentials oncredentials.xml. - Execution: Run the
DeployScript.ps1to deploy the setup script across multiple machines, using IP addresses from the Excel file.