Category: Microsoft Windows PowerShell

Microsoft Windows Server 2012 – Identify an iSCSI Initiator IQN

You may use the following method to identify an iSCSI Initiator IQN in Microsoft Windows Server 2012 from Windows PowerShell.

After opening Windows PowerShell type the command iscsicli.

Microsoft Windows Server 2012 - Identify an ISCSI Initiator IQN - 00

In this example the iSCSI Initiator IQN is iqn.1991-05.com.microsoft:clus01a.root.sysadmin.net.

Enjoy!


Microsoft Windows PowerShell – Server Uptime Script

You may use the following Microsoft Windows PowerShell (.ps1) script to create an HTML file daily that provides an uptime report for the servers in your Information Technology (IT) infrastructure.

 

=====START=====

<######################################################################

# Author : Bhavik Solanki 

# Date : 28th March 2012 

# Version : 1.0

# Desctiption : This script will help to monitor Server availability.

#
######################################################################>

Function GetStatusCode
{
Param([int] $StatusCode)
switch($StatusCode)
{
0 {“Success”}
11001 {“Buffer Too Small”}
11002 {“Destination Net Unreachable”}
11003 {“Destination Host Unreachable”}
11004 {“Destination Protocol Unreachable”}
11005 {“Destination Port Unreachable”}
11006 {“No Resources”}
11007 {“Bad Option”}
11008 {“Hardware Error”}
11009 {“Packet Too Big”}
11010 {“Request Timed Out”}
11011 {“Bad Request”}
11012 {“Bad Route”}
11013 {“TimeToLive Expired Transit”}
11014 {“TimeToLive Expired Reassembly”}
11015 {“Parameter Problem”}
11016 {“Source Quench”}
11017 {“Option Too Big”}
11018 {“Bad Destination”}
11032 {“Negotiating IPSEC”}
11050 {“General Failure”}
default {“Failed”}
}
}

Function GetUpTime
{
param([string] $LastBootTime)
$Uptime = (Get-Date) – [System.Management.ManagementDateTimeconverter]::ToDateTime($LastBootTime)
“Days: $($Uptime.Days); Hours: $($Uptime.Hours); Minutes: $($Uptime.Minutes); Seconds: $($Uptime.Seconds)”
}

#Change value of the following parameter as needed
$OutputFile = “\\server.domain.com\Information Technology Reports\Server Uptime\Server Uptime – ” + $(Get-Date -Format ‘MM_dd_yyyy HH_mm tt’) + “.html”
$ServerList = Get-Content “C:\Scripts\Server_Uptime.txt”

$Result = @()
Foreach($ServerName in $ServerList)
{
$pingStatus = Get-WmiObject -Query “Select * from win32_PingStatus where Address=’$ServerName'”

$Uptime = $null
if($pingStatus.StatusCode -eq 0)
{
$OperatingSystem = Get-WmiObject Win32_OperatingSystem -ComputerName $ServerName -ErrorAction SilentlyContinue
$Uptime = GetUptime( $OperatingSystem.LastBootUpTime )
}

$Result += New-Object PSObject -Property @{
ServerName = $ServerName
IPV4Address = $pingStatus.IPV4Address
Status = GetStatusCode( $pingStatus.StatusCode )
Uptime = $Uptime
}
}

if($Result -ne $null)
{
$HTML = ‘<style type=”text/css”>
#Header{font-family:”Trebuchet MS”, Arial, Helvetica, sans-serif;width:100%;border-collapse:collapse;}
#Header td, #Header th {font-size:14px;border:1px solid #98bf21;padding:3px 7px 2px 7px;}
#Header th {font-size:14px;text-align:left;padding-top:5px;padding-bottom:4px;background-color:#A7C942;color:#fff;}
#Header tr.alt td {color:#000;background-color:#EAF2D3;}
</Style>’

$HTML += “<HTML><BODY><Table border=1 cellpadding=0 cellspacing=0 id=Header>
<TR>
<TH><B>Server Name</B></TH>
<TH><B>IP Address</B></TD>
<TH><B>Status</B></TH>
<TH><B>Uptime</B></TH>
</TR>”
Foreach($Entry in $Result)
{
if($Entry.Status -ne “Success”)
{
$HTML += “<TR bgColor=Red>”
}
else
{
$HTML += “<TR>”
}
$HTML += ”
<TD>$($Entry.ServerName)</TD>
<TD>$($Entry.IPV4Address)</TD>
<TD>$($Entry.Status)</TD>
<TD>$($Entry.Uptime)</TD>
</TR>”
}
$HTML += “</Table></BODY></HTML>”

$HTML | Out-File $OutputFile
}

=====END=====

This script assumes you have a Microsoft Notepad (.txt) file titled Server_Uptime.txt in the C:\Scripts directory that contains the Fully Qualified Domain Name (FQDN) of each server for the report.

Below you may view a sample report. For security reasons, I have removed the FQDN of each server as well as it’s Internet Protocol (IP) address.

Server_Uptime

 


Microsoft Windows PowerShell – Determine Windows Uptime

You may use the command net statistics server in order to determine the uptime for Windows 7/2012. The Statistics since… output is the amount of the time the server/workstation has been up.

Windows Server 2012 - Command PromptEnjoy!


Microsoft Windows PowerShell – Delete Files Older Than X Days

You may use the following Microsoft Windows PowerShell script to delete files in a directory that are X days old (I found the script here: http://elderec.org/2012/02/scripting-delete-files-and-folders-older-than-x-days/).

===START===

# set folder path
$dump_path = “C:\shares\dump”

# set min age of files
$max_days = “-7”

# get the current date
$curr_date = Get-Date

# determine how far back we go based on current date
$del_date = $curr_date.AddDays($max_days)

# delete the files
Get-ChildItem $dump_path -Recurse | Where-Object { $_.LastWriteTime -lt $del_date } | Remove-Item

===END===

In order to customize the script substitute the variables (i.e. $dump_path = “C:\shares\dump”) for your environment. As always, be sure to test scripts in a lab environment that mirrors your production environment as closely as possible.

Enjoy!


Microsoft Windows PowerShell – Set-ExecutionPolicy Cmdlet

You may use the following command(s) to change the execution policy for Windows PowerShell.

Set-ExecutionPolicy Restricted

Set-ExecutionPolicy AllSigned

Set-ExecutionPolicy RemoteSigned

Set-ExecutionPolicy Unrestricted

Enjoy!