Tuesday 21 July 2015

Sending mail report of our computers and servers of theres hard disk

#############################################################################
#                                                                           #
#  Check disk space and send an HTML report as the body of an email.        #
#  Reports only disks on computers that have low disk space.                #
#  Author: Mike Carmody                                                     #
#  Some ideas extracted from Thiyagu's Exchange DiskspaceHTMLReport module.                                                          #
#  I have not added any error checking into this script yet.                #
#                                                                           #
#                                                                           #
#############################################################################
# Continue even if there are errors
$ErrorActionPreference = "Continue";

#########################################################################################
# Items to change to make it work for you.
#
# EMAIL PROPERTIES
#  - the $users that this report will be sent to.
#  - near the end of the script the smtpserver, From and Subject.

# REPORT PROPERTIES
#  - you can edit the report path and report name of the html file that is the report.
#########################################################################################

# Set your warning and critical thresholds
$percentWarning = 85;
$percentCritcal = 10;

# EMAIL PROPERTIES
    # Set the recipients of the report.
        $users = "users@mail.com"
          #$users = "You@company.com" # I use this for testing by uing my email address.
        #$users = "you@company.com", "manager@company.com", "etc@company.com";  # can be sent to individuals.


# REPORT PROPERTIES
    # Path to the report
        $reportPath = "E:\Automation\scripts\";

    # Report name
        $reportName = "DiskSpaceRpt_$(get-date -format ddMMyyyy).html";

# Path and Report name together
$diskReport = $reportPath + $reportName

#Set colors for table cell backgrounds
$redColor = "#FF0000"
$orangeColor = "#FBB917"
$whiteColor = "#FFFFFF"

# Count if any computers have low disk space.  Do not send report if less than 1.
$i = 0;

# Get computer list to check disk space
$computers = Get-Content "E:\Automation\scripts\list.txt";   //list is for our computer name and sever name
#$computers = "C:\scripts\Diskspace_report\list.txt"
$datetime = Get-Date -Format "MM-dd-yyyy_HHmmss";

# Remove the report if it has already been run today so it does not append to the existing report
If (Test-Path $diskReport)
    {
        Remove-Item $diskReport
    }

# Cleanup old files..
$Daysback = "-7"
$CurrentDate = Get-Date;
$DateToDelete = $CurrentDate.AddDays($Daysback);
Get-ChildItem $reportPath | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item;

# Create and write HTML Header of report
$titleDate = get-date -uformat "%m-%d-%Y - %A"
$header = "
        <html>
        <head>
        <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
        <title>DiskSpace Report</title>
        <STYLE TYPE='text/css'>
        <!--
        td {
            font-family: Tahoma;
            font-size: 11px;
            border-top: 1px solid #999999;
            border-right: 1px solid #999999;
            border-bottom: 1px solid #999999;
            border-left: 1px solid #999999;
            padding-top: 0px;
            padding-right: 0px;
            padding-bottom: 0px;
            padding-left: 0px;
        }
        body {
            margin-left: 5px;
            margin-top: 5px;
            margin-right: 0px;
            margin-bottom: 10px;
            table {
            border: thin solid #000000;
        }
        -->
        </style>
        </head>
        <body>
        <table width='100%'>
        <tr bgcolor='#CCCCCC'>
        <td colspan='7' height='25' align='center'>
        <font face='tahoma' color='#003399' size='4'><strong>Local Hosted Environment DiskSpace Report for $titledate</strong></font>
        </td>
        </tr>
        </table>
"
 Add-Content $diskReport $header

# Create and write Table header for report
 $tableHeader = "
 <table width='100%'><tbody>
    <tr bgcolor=#CCCCCC>
    <td width='10%' align='center'>Server</td>
    <td width='5%' align='center'>Drive</td>
    <td width='15%' align='center'>Drive Label</td>
    <td width='10%' align='center'>Total Capacity(GB)</td>
    <td width='10%' align='center'>Used Capacity(GB)</td>
    <td width='10%' align='center'>Free Space(GB)</td>
    <td width='5%' align='center'>Freespace %</td>
    </tr>
"
Add-Content $diskReport $tableHeader

# Start processing disk space reports against a list of servers
  foreach($computer in $computers)
    {   
    $disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3"
    $computer = $computer.toupper()
        foreach($disk in $disks)
    {       
        $deviceID = $disk.DeviceID;
        $volName = $disk.VolumeName;
        [float]$size = $disk.Size;
        [float]$freespace = $disk.FreeSpace;
        $percentFree = [Math]::Round(($freespace / $size) * 100, 2);
        $sizeGB = [Math]::Round($size / 1073741824, 2);
        $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);
        $usedSpaceGB = $sizeGB - $freeSpaceGB;
        $color = $whiteColor;

# Set background color to Orange if just a warning
    if($percentFree -lt $percentWarning)     
        {
       $color = $orangeColor   

# Set background color to Orange if space is Critical
      if($percentFree -lt $percentCritcal)
        {
        $color = $redColor
       }       

 # Create table data rows
    $dataRow = "
        <tr>
        <td width='10%'>$computer</td>
        <td width='5%' align='center'>$deviceID</td>
        <td width='15%' >$volName</td>
        <td width='10%' align='center'>$sizeGB</td>
        <td width='10%' align='center'>$usedSpaceGB</td>
        <td width='10%' align='center'>$freeSpaceGB</td>
        <td width='5%' bgcolor=`'$color`' align='center'>$percentFree</td>
        </tr>
"
Add-Content $diskReport $dataRow;
Write-Host -ForegroundColor DarkYellow "$computer $deviceID percentage free space = $percentFree";
    $i++       
        }
    }
}

# Create table at end of report showing legend of colors for the critical and warning
 $tableDescription = "
 </table><br><table width='20%'>
    <tr bgcolor='White'>
    <td width='10%' align='center' bgcolor='#FBB917'>Warning less than 85% free space</td>
    <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 10% free space</td>
    </tr>
"
     Add-Content $diskReport $tableDescription
    Add-Content $diskReport "</body></html>"

# Send Notification if alert $i is greater then 0
if ($i -gt 0)
{
    foreach ($user in $users)
{
        Write-Host "Sending Email notification to $user"
       
        $smtpServer = "smtp.gmail.com"
        #$smtpport = "587"
        $username = "your@mail.com" 
        $password = "password"
        $smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, 587);
        $smtp.EnableSSL = $true
        $smtp.credentials = New-Object System.Net.NetworkCredential($Username, $Password);
        $msg = New-Object Net.Mail.MailMessage
        $msg.To.Add($user)
        $msg.From = "your@mail.com"    //Sender Email ID
        $msg.Subject = "Local Environment DiskSpace Report for $titledate"
        $msg.IsBodyHTML = $true
        $msg.Body = get-content $diskReport
        $smtp.Send($msg)
        $body = ""
    }
  }
powershell set-ExecutionPolicy Restricted

exit

Wednesday 1 April 2015

ASP.NET - VALIDATORS

ASP.Net provides the following validation controls:


  • RequiredFieldValidator
  • RangeValidator
  • CompareValidator
  • RegularExpressionValidator
  • CustomValidator
  • ValidationSummary

The BaseValidator Class:

The validation control classes inherit from the BaseValidator class and inherit its properties and methods. Therefore, it would help to take a look at the properties and the methods of this base class, which are common for all the validation controls:
MembersDescription
ControlToValidateIndicates the input control to validate.
DisplayIndicates how the error message is shown.
EnableClientScriptIndicates whether client side validation will take.
EnabledEnables or disables the validator.
ErrorMessageError string.
TextError text to be shown if validation fails.
IsValidIndicates whether the value of the control is valid.
SetFocusOnErrorIt indicates whether in case of an invalid control, the focus should switch to the related input control.
ValidationGroupThe logical group of multiple validators, where this control belongs.
ValidateThis method revalidates the control and updates the IsValid property.

The RequiredFieldValidator:

The RequiredFieldValidator control ensures that the required field is not empty. It is generally tied to a text box to force input into the text box.
The syntax for the control:
<asp:RequiredFieldValidator ID="rfvcandidate" 
        runat="server" ControlToValidate ="ddlcandidate"
        ErrorMessage="Please choose a candidate" 
        InitialValue="Please choose a candidate">
</asp:RequiredFieldValidator>

The RangeValidator:

The RangeValidator control verifies that the input value falls within a predetermined range.
It has three specific properties:
PropertiesDescription
Typeit defines the type of the data; the available values are: Currency, Date, Double, Integer and String
MinimumValueit specifies the minimum value of the range
MaximumValueit specifies the maximum value of the range
The syntax for the control:
<asp:RangeValidator ID="rvclass" 
       runat="server" 
       ControlToValidate="txtclass" 
       ErrorMessage="Enter your class (6 - 12)" 
       MaximumValue="12" 
       MinimumValue="6" Type="Integer">
</asp:RangeValidator>

The CompareValidator:

The CompareValidator control compares a value in one control with a fixed value, or, a value in another control.
It has the following specific properties:
PropertiesDescription
Typeit specifies the data type
ControlToCompareit specifies the value of the input control to compare with
ValueToCompareit specifies the constant value to compare with
Operatorit specifies the comparison operator, the available values are: Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual and DataTypeCheck
The basic syntax for the control:
<asp:CompareValidator ID="CompareValidator1" 
        runat="server" 
        ErrorMessage="CompareValidator">
</asp:CompareValidator>

The RegularExpressionValidator

The RegularExpressionValidator allows validating the input text by matching against a pattern against a regular expression. The regular expression is set in the ValidationExpression property.
The following table summarizes the commonly used syntax constructs for regular expressions:
Character EscapesDescription
\bMatches a backspace
\tMatches a tab
\rMatches a carriage return
\vMatches a vertical tab
\fMatches a form feed
\nMatches a new line
\Escape character
Apart from single character match, a class of characters could be specified that can be matched, called the metacharacters.
MetacharactersDescription
.Matches any character except \n
[abcd]Matches any character in the set
[^abcd]Excludes any character in the set
[2-7a-mA-M]Matches any character specified in the range
\wMatches any alphanumeric character and underscore
\WMatches any non-word character
\sMatches whitespace characters like, space, tab, new line etc.
\SMatches any non-whitespace character
\dMatches any decimal character
\DMatches any non-decimal character
Quantifiers could be added to specify number of times a character could appear
QuantifierDescription
*Zero or more matches
+One or more matches
?Zero or one matches
{N}N matches
{N,}N or more matches
{N,M}Between N and M matches
The syntax for the control:
<asp:RegularExpressionValidator ID="string"
        runat="server"
        ErrorMessage="string"
        ValidationExpression="string"
        ValidationGroup="string">
</asp:RegularExpressionValidator>

The CustomValidator:

The CustomValidator control allows writing application specific custom validation routines for both the client side and the server side validation.
The client side validation is accomplished through the ClientValidationFunction property. The client side validation routine should be written in a scripting language, like JavaScript or VBScript, which the browser can understand.
The server side validation routine must be called from the control.s ServerValidate event handler. The server side validation routine should be written in any .Net language, like C# or VB.Net.
The basic syntax for the control
<asp:CustomValidator ID="CustomValidator1" 
       runat="server" 
       ClientValidationFunction=.cvf_func.
       ErrorMessage="CustomValidator">
</asp:CustomValidator>

The ValidationSummary Control

The ValidationSummary control does not perform any validation but shows a summary of all errors in the page. The summary displays the values of the ErrorMessage property of all validation controls that failed validation.
The following two mutually inclusive properties list out the error message:
  • ShowSummary: shows the error messages in specified format.
  • ShowMessageBox: shows the error messages in a separate window.
The syntax for the control:
<asp:ValidationSummary ID="ValidationSummary1" 
       runat="server" 
       DisplayMode = "BulletList" 
       ShowSummary = "true"
       HeaderText="Errors:" />

Validation Groups:

Complex pages have different groups of information provided in different panels. In such a situation a need for performing validation separately for separate group, might arise. This kind of situation is handled using validation groups.
To create a validation group, you should put the input controls and the validation controls into the same logical group by setting their ValidationGroup property.

Example:

The following example describes a form to be filled up by all the students of a school, divided into four houses, for electing the school president. We will be using the validation controls to validate the user input.
The form in Design view:
form in Design view
The content file code:
<form id="form1" runat="server">
<table style="width: 66%;">
<tr>
<td class="style1" colspan="3" align="center">
<asp:Label ID="lblmsg" 
           Text="President Election Form : Choose your president" 
           runat="server" />
</td>
</tr>
<tr>
<td class="style3">
Candidate:
</td>
<td class="style2">
<asp:DropDownList ID="ddlcandidate" runat="server" style="width:239px">
<asp:ListItem>Please Choose a Candidate</asp:ListItem>
<asp:ListItem>M H Kabir</asp:ListItem>
<asp:ListItem>Steve Taylor</asp:ListItem>
<asp:ListItem>John Abraham</asp:ListItem>
<asp:ListItem>Venus Williams</asp:ListItem>
</asp:DropDownList>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvcandidate" 
       runat="server" ControlToValidate ="ddlcandidate"
       ErrorMessage="Please choose a candidate" 
       InitialValue="Please choose a candidate">
</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style3">
House:</td>
<td class="style2">
<asp:RadioButtonList ID="rblhouse" 
      runat="server" 
      RepeatLayout="Flow">
<asp:ListItem>Red</asp:ListItem>
<asp:ListItem>Blue</asp:ListItem>
<asp:ListItem>Yellow</asp:ListItem>
<asp:ListItem>Green</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvhouse" 
       runat="server" 
       ControlToValidate="rblhouse" 
       ErrorMessage="Enter your house name">
</asp:RequiredFieldValidator>
<br />
</td>
</tr>
<tr>
<td class="style3">
Class:</td>
<td class="style2">
<asp:TextBox ID="txtclass" runat="server"></asp:TextBox>
</td>
<td>
<asp:RangeValidator ID="rvclass" 
       runat="server" ControlToValidate="txtclass" 
       ErrorMessage="Enter your class (6 - 12)" MaximumValue="12" 
       MinimumValue="6" Type="Integer">
</asp:RangeValidator>
</td>
</tr>
<tr>
<td class="style3">
Email:</td>
<td class="style2">
<asp:TextBox ID="txtemail" runat="server" style="width:250px">
</asp:TextBox>
</td>
<td>
<asp:RegularExpressionValidator ID="remail" 
      runat="server" 
      ControlToValidate="txtemail" ErrorMessage="Enter your email" 
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td class="style3" align="center" colspan="3">
<asp:Button ID="btnsubmit" runat="server" onclick="btnsubmit_Click" 
style="text-align: center" Text="Submit" style="width:140px" />
</td>
</tr>
</table>
<asp:ValidationSummary ID="ValidationSummary1" 
      runat="server" 
      DisplayMode ="BulletList" 
      ShowSummary ="true"
      HeaderText="Errors:" />
</form>
The code behind the submit button:
protected void btnsubmit_Click(object sender, EventArgs e)
{
   if (Page.IsValid)
   {
      lblmsg.Text = "Thank You";
   }
   else
   {
      lblmsg.Text = "Fill up all the fields";
   }
}


Auto Send Birthday Wish C# code by using Console Application mail id get from Database

Auto Send Birthday Wish C# code by using Console Application mail id get from Database 



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Net.Mime;

namespace BdayEmail
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connStr = ConfigurationManager.ConnectionStrings["EmpDBConnectionString"].ConnectionString;
                SqlConnection con = new SqlConnection(connStr);
                con.Open();
                SqlCommand cmd;
                cmd = new SqlCommand("SELECT empemail,EmpDOB,empname,Photo,BdayMessage,CC FROM EmpDetails where datepart(day,EmpDOB)= datepart(day,sysdatetime()) and datepart(month,EmpDOB)=datepart(month,sysdatetime())", con);
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    string todaydate = DateTime.Now.ToString("dd/MM");
                    string Bday = Convert.ToDateTime(reader["EmpDOB"]).ToString("dd/MM");
                    int diff = DateTime.Compare(DateTime.Today, Convert.ToDateTime(Bday));
                    if (diff == 0)
                    {
                        string Email = reader["EmpEmail"].ToString();
                        string Name = reader["EmpName"].ToString();
                        string Photo = reader["Photo"].ToString();
                        string cc = reader["CC"].ToString();
                        string Bdaymessage = reader["BdayMessage"].ToString();
                        string body = "<br><b><i><font Size=4 face=Comic Sans MS color= #FF2B9E> Dear</br><br><font Size=4 face=Comic Sans MS color=#FF2B9E>" + Name + "</i></b>" + "<br>" + "<br><img src=" + Photo + "></body></html></body></html>" + "<br><b><font Size=4 face=Comic Sans MS color=#FF2B9E><i>" + Bdaymessage + "</i></b></br> " + "<br><br><br>";
                        AlternateView av = AlternateView.CreateAlternateViewFromString(body, null, System.Net.Mime.MediaTypeNames.Text.Html);

                        LinkedResource inline = new LinkedResource(Photo, MediaTypeNames.Image.Jpeg);
                        inline.ContentId = Guid.NewGuid().ToString();
                        av.LinkedResources.Add(inline);

                        System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

                        msg.AlternateViews.Add(av);
                        msg.To.Add(Email);
                        msg.CC.Add(cc);
                        msg.Subject = " WIsH YoU MaNy MaNY HaPPy Birthday";
                        msg.From = new System.Net.Mail.MailAddress("sendermailid@gmail.com");
                        SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
                        NetworkCredential NetCrd = new NetworkCredential("sendermailid@gmail.com", "password");
                        mailClient.UseDefaultCredentials = false;
                        mailClient.Credentials = NetCrd;
                        mailClient.EnableSsl = true;
                        mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                        mailClient.Send(msg);
                        reader.Close();
                        con.Close();

                    }
                    else
                    {
                        Console.Write("its a earlier date");
                    }
                }

            }
            catch (Exception ex)
            {
                Console.Write("There is No Birthday" + ex);
            }
        }
    }
}

SAP HANA DB ANALYSIS AFTER ISSUES

To be able to further analyze your issue and environment please download the attached shell script you can get from KBA: 3218277 - Collectin...