##########################################################################################
#
# Script: SYSLOG_CHECK.ps1
#
# Description: This script get all ESXi hosts and check if the local syslogcollector
# maintains a coresponding Folder. if not it ask to configure Syslog on
# the particular ESXi.
# Script is tested under ESXi 5.1 Build 799733 / vCenter 5.1 Build 799731
# Change the Vars / connect manualy to your vCenter / copy&paste this code
# to your powershell session.
#
# Autor: hofstetter.adrian[AT]gmail.com
#
# Created: 09.04.2013
#
# Changelog: 09.04.2013 Script created
#
##########################################################################################
####################### Vars
$sqlserverName = 'sqlserver'
$databaseName = 'vCenterDB'
$syslogsrv = '10.10.10.10'
$lowestbuild = 799732
$localsyslpath = 'F:\ProgramData\VMware\VMware Syslog Collector\Data\'
####################### Functions
function yesno {
param(
[Parameter(Mandatory=$true, HelpMessage="What's default yes=y no=n Quote it!!”)][String]$d,
[Parameter(Mandatory=$true, HelpMessage="Enter the Y/N Question! Quote it!!”)][String]$Q
)
$retval = read-host -Prompt "$Q (y/n) default=$d"
if($retval -eq "") {
if($d -eq "y" -OR $d -eq "Y") {
return $true
}
else {
if($d -eq "n" -OR $d -eq "N") {
return $false
}
}
}
else {
if($retval[0] -eq "y" -OR $retval[0] -eq "Y") {
return $true
}
else{
if($retval[0] -eq "n" -OR $retval[0] -eq "N") {
return $false
}
else{
echo "Your answer was not valid. Answer with y or n"
yesno $d $Q
}
}
}
} #yesno
function Get-SqlData {
param([string]$sqlserverName=$(throw 'serverName is required.'), [string]$databaseName=$(throw 'databaseName is required.'),
[string]$query=$(throw 'query is required.')
)
Write-Verbose "Get-SqlData serverName:$sqlserverName databaseName:$databaseName query:$query"
$connString = "Server=$sqlserverName;Database=$databaseName;Integrated Security=SSPI;"
$da = New-Object "System.Data.SqlClient.SqlDataAdapter" ($query,$connString)
$dt = New-Object "System.Data.DataTable"
$da.fill($dt) > $null
# $da.fill($dt)
return $dt
} #Get-SqlData
####################### Main Code
$sqlres = Get-SqlData $sqlserverName $databaseName 'select DNS_NAME,IP_ADDRESS from dbo.VPX_HOST ORDER BY 1'
foreach($row in $sqlres) {
if(!(Test-Path ($localsyslpath + $row.IP_ADDRESS))) {
echo ($row.DNS_NAME + ' (' + $row.IP_ADDRESS + ") Syslog Folder does not exist!")
if((get-vmhost $row.DNS_NAME).Build -gt $lowestbuild) {
if(yesno y " should i configure syslog for you?") {
echo (' + configuring advanced Settings syslogHost: ' + $syslogsrv)
Set-VMHostAdvancedConfiguration -Name Syslog.global.logHost -Value "$syslogsrv" -VMHost $row.DNS_NAME
echo (' + restartsyslog service')
$esxcli = Get-EsxCli -VMHost $row.DNS_NAME
$esxcli.system.syslog.reload()
echo (' + open firewallport for syslog')
Get-VMHostFirewallException -Name "syslog" -VMHost $row.DNS_NAME | set-VMHostFirewallException -Enabled:$true
}
}
else {
echo " Syslog has to be configured manualy"
}
}
else {
echo ($row.DNS_NAME + ' (' + $row.IP_ADDRESS + ") Syslog Folder OK")
}
}