Monday, September 22, 2014

Live Migrating multiple VMs [HyperV 2008]

This powershell script will let you live migrate multiple virtual machines serially.
The script will ask you to select which machines do you want to migrate and to which destination node as in the below screenshots

To run the script on Windows 2008 R2, you need to install powershell 3.0





 
 
 


Import-Module FailoverClusters

$clustername = Get-Cluster


$vms = Get-ClusterGroup  -Cluster $clustername  | Out-GridView -PassThru -Title "Select VMs to live migrate"
$destination = Get-ClusterNode | Out-GridView -Title "Select destination HyperV host" -PassThru
$count = 0

foreach ($vm in $vms){
 $count += 1
 $total = $vms.count
 write-output "[$count/$total] migrating $vm to $destination..."
 Move-ClusterVirtualMachineRole -Name $vm -Node $destination
}

write-output "All Done"

Wednesday, June 25, 2014

Windows out of the box cmd send mail one liner with variables in subject/body

powershell -Command "Send-MailMessage -To to@recepient.com -Cc cc@recepient.com -From from@sender.com -SmtpServer 127.0.0.1 -Subject $('Mail from computer: ' + (hostname)) -Body $((date).ToString() + ' Mail from computer: ' + (hostname))

Tuesday, June 24, 2014

[Microsoft][ODBC SQL Server Driver][SQL Server]Cannot find the user 'AdtServer', because it does not exist or you do not have permission

I was installing SCOM ACS 2012 R2 and configuring it to use SQL authentication. This is not to collect events from an untrusted domain, I was just implementing redundant ACS collectors as described here which would require the collectors to use SQL authentication to connect to the backend database.

ACS setup completed successfully on all ACS collector servers, but the Audit Collection Services shuts down shortly after starting and logs this event

Error occured on database connection:

Status: 0x04080000

ODBC Error: 15151

ODBC State: 42000

Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot find the user 'AdtServer', because it does not exist or you do not have permission.

Database: SqlWriter

Connection: Maintenance

Statement:

/**********************************************************

The reason this happened was because I precreated the SQL account and gave it dbcreator role then supplied it to the ACS setup. I then discovered that the ACS installer would actually create the account itself, surprisingly it did not complain that the account already existed and completed successfully but apparently something was still broken.

I uninstalled ACS, deleted the SQL account then reinstalled ACS and now it works.

 

Sunday, September 22, 2013

The SQL Server (MSSQLSERVER) service terminated with service-specific error %%17058.

While trying to failover the SQL server to another node, it refused to start and this error was getting logged in the Event Viewer

The SQL Server (MSSQLSERVER) service terminated with service-specific error %%17058.
The problem turned out to be with ERRORLOG being set to read only.

After I cleared the read only attribute from MSSQL\LOG\ERRORLOG the service started successfully.

Tuesday, April 2, 2013

Top SQL Queries

select
highest_cpu_queries.plan_handle,
highest_cpu_queries.total_worker_time,
highest_cpu_queries.total_logical_reads,
highest_cpu_queries.total_logical_writes,
highest_cpu_queries.execution_count,
q.dbid,
q.objectid,
q.number,
q.encrypted,
q.[text]
from
(select top 20
qs.plan_handle,
qs.total_worker_time,
qs.total_logical_reads,
qs.total_logical_writes,
qs.execution_count
from
sys.dm_exec_query_stats qs
order by qs.total_worker_time desc) as highest_cpu_queries
cross apply sys.dm_exec_sql_text(plan_handle) as q
order by highest_cpu_queries.total_worker_time desc
--order by highest_cpu_queries.total_logical_reads desc
--order by highest_cpu_queries.total_logical_writes desc
--order by highest_cpu_queries.execution_count desc

--select top 10 * from sys.dm_exec_query_stats qs

Thursday, March 28, 2013

Converting IIS logs time from UTC to local time

If you notice that the time logged in IIS logs does not match your server's local time, this is because IIS logs time in UTC (GMT) to conform with the W3C log format so if you are in a different time zone for example UTC -3 you will find the time 3 hours ahead in the logs.

To change that, you can choose a different log format from the IIS manager or you can convert the log file using Log Parser.

Download and install Log Parser then run the following command

LogParser.exe "SELECT DATE,TO_LOCALTIME(time) AS time,s-ip,cs-method,cs-uri-stem,cs-uri-query,s-port,cs-username,c-ip,cs(User-Agent),sc-status,sc-substatus,sc-win32-status,time-taken INTO c:\ayman\output.log FROM c:\ayman\input.log" -i:IISW3C -o:W3C