dinsdag 23 november 2010

Handmatig opschonen vCenter 4.x database

In een eerdere blogpost meldde ik dat het met vCenter 4.x mogelijk is om met een 'Database Retention Policy' de hoeveelheid bewaarde task- en event data te beheren. Dit is een handige functie om te voorkomen dat de vCenter database volloopt met gegevens waar je toch niets meer mee doet.

Dat mag dan wel erg handig zijn, maar stel dat je een oude database wilt herstellen en daar helemaal geen task- en event data in wilt hebben? Hoe los je zoiets op?

Met vCenter 2.x was er een cleanup database script waarmee dit kon. Deze controleert op de kolom VER_ID in de VPX_VERSION tabel. Bij vCenter 4.x heeft deze kolom een waarde groter dan 5 en dan krijg je de volgende foutmelding:
FATAL ERROR: This script was designed for a previous version of VirtualCenter.
Maar niet getreurd, er is ook een cleanup script beschikbaar voor vCenter 4.x. Deze is beschikbaar op de VMware knowledge base site via het volgende URL: http://kb.vmware.com/kb/1025914

Het is overigens wel een beetje jammer dat ze de meegeleverde stored procedure cleanup_events_tasks_proc niet geparameteriseerd hebben. Dat zou ik een mooiere oplossing vinden dan een los script dat je van de website moet downloaden.

donderdag 11 november 2010

Windows 2008 RDP: meerdere sessies per gebruiker

Onlangs merkte ik op dat er in Windows 2008 standaard maar één RDP sessie per gebruiker wordt toegestaan. Dit is niet altijd wenselijk, dus zocht ik naar een manier om dit aan te passen. Dit is mogelijk door het volgende commando uit te voeren:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0x0 /f

Daarnaast is het mogelijk om deze instelling met een lokaal of group policy af te dwingen.

woensdag 27 oktober 2010

Expliciete ACLs inventariseren met Powershell

Het is met NTFS erg gemakkelijk om op allerlei niveaus rechten in te stellen. Deze rechten worden meestal ook doorgegeven aan de onderliggende objecten. Om een overzicht te krijgen van objecten waarop expliciet rechten zijn ingesteld, heb ik een klein stukje Powershell code geschreven.

Get-ChildItem -Recurse | %{
$Path = $_.FullName
(Get-Acl $Path).Access | where {$_.IsInherited -eq $false} | Select-Object `
@{n='Path';e={ $Path }}
} | sort-object -property Path -unique

De output van dit script is uiteraard volledig naar wens aan te passen. Wellicht is het ook mogelijk om dit op andere providers toe te passen dan een NTFS filesysteem. Er zijn namelijk ook applicaties zoals MS Exchange en SQL server waarin ACLs worden gebruikt.

dinsdag 26 oktober 2010

SQL 2008 Express backups met PowerShell

Als je gebruikt maakt van de Express editie van SQL Server, dan zul je het moeten doen zonder Maintenance Plans. Hoewel dit een zeer eenvoudige tools is om te gebruiken, is er voor SQL 2008 Express een goed alternatief beschikbaar; PowerShell!

Beter goed gejat dan slecht verzonnen was mijn insteek bij deze oplossing. Ik heb gebruik gemaakt van de volgende artikelen:
Daarnaast had ik zelf een one-liner om bestanden ouder dan een bepaalde tijd op te ruimen. Als je dit combineert, dan krijg je het onderstaande resultaat.

#
# Loads the SQL Server Management Objects (SMO)
#

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
throw "SQL Server Provider for Windows PowerShell is not installed."
}
else
{
$item = Get-ItemProperty $sqlpsreg
$sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


$assemblylist =
"Microsoft.SqlServer.Management.Common",
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.Instapi ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.SqlTDiagM ",
"Microsoft.SqlServer.SString ",
"Microsoft.SqlServer.Management.RegisteredServers ",
"Microsoft.SqlServer.Management.Sdk.Sfc ",
"Microsoft.SqlServer.SqlEnum ",
"Microsoft.SqlServer.RegSvrEnum ",
"Microsoft.SqlServer.WmiEnum ",
"Microsoft.SqlServer.ServiceBrokerEnum ",
"Microsoft.SqlServer.ConnectionInfoExtended ",
"Microsoft.SqlServer.Management.Collector ",
"Microsoft.SqlServer.Management.CollectorEnum",
"Microsoft.SqlServer.Management.Dac",
"Microsoft.SqlServer.Management.DacEnum",
"Microsoft.SqlServer.Management.Utility"


foreach ($asm in $assemblylist)
{
$asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}

Push-Location
cd $sqlpsPath
update-FormatData -prependpath SQLProvider.Format.ps1xml
Pop-Location

$s = New-Object ("Microsoft.SqlServer.Management.Smo.Server") "(local)"

$Date = Get-Date
$bkdir = $s.Settings.BackupDirectory
$dbs = $s.Databases
foreach ($db in $dbs)
{
if($db.Name -ne "tempdb") #We don't want to backup the tempdb database
{
$dbname = $db.Name
$dt = get-date $Date -format yyyyMMddHHmm #We use this to create a file name based on the timestamp
$dbBackup = new-object ("Microsoft.SqlServer.Management.Smo.Backup")
$dbBackup.Action = "Database"
$dbBackup.Database = $dbname
$dbBackup.Devices.AddDevice($bkdir + "\" + $dbname + "_" + $dt + ".bak", "File")
$dbBackup.Initialize = $true
$dbBackup.SqlBackup($s)
}
}
$CutOff = 7
$bkdir | get-childitem | where {$_.PSIsContainer -eq $false -AND $_.LastWriteTime.date -lt ($Date).AddDays(-$CutOff)} | Remove-Item

woensdag 20 oktober 2010

PowerCLI als vervanger voor COS opdrachten - ESX patches

Met de release van vSphere versie 4.1 was het hoge woord eruit. De volgende 'major' release van vSphere zal uitsluitend in een ESXi variant beschikbaar komen.

Deze gedachte speelt al een tijdje in mijn achterhoofd als ik het beheer van ESX servers uitvoer. Vaak maak ik gebruik van een batchfile die door middel van plink, pageant en public/private keypairs commando's uitvoert in het Console Operating System (service console) van een groep ESX servers.

Dit is zometeen dus niet meer mogelijk en zodoende probeer ik tegenwoordig zoveel mogelijk met PowerCLI te doen. Een van de opdrachten die ik probeer om te zetten is het opvragen van geïnstalleerde software. Dit is van belang omdat ik de versie van een geïnstaleerde netwerk driver wil kunnen zien.

Helaas is er geen PowerCLI versie van het RPM commando beschikbaar, maar sinds PowerCLI versie 4.1 is er wel de CMDlet Get-VMHostPatch. Met deze CMDlet is het mogelijk om de geïnstalleerde patches van een ESX hosts uit te lezen. Een nadeel van deze methode is dat deze alleen werkt voor ESX 4 en hoger.

De onderstaande code gebruik ik om een overzicht te maken van alle ESX hosts in een vCenter omgeving:

Get-VMhost | Get-VMHostPatch | select @{N="Host";E={Get-VMhost -Id $_.VMhostid}}, @{N="Build";E={Get-VMhost -Id $_.VMhostid | Get-View | %{$_.Config.Product.build}}}, ID, InstallDate

donderdag 14 oktober 2010

Mailforwarding controleren met powershell

Sinds ik powershell gebruik zie ik steeds meer toepassingen en maak ik steeds minder gebruik van andere tools. Toch heeft powershell standaard nog wat meters te maken als het gaat om het beheer van Active Directory. Gelukkig vult Quest software dit gat op met een aantal AD-gerelateerde CMDlets, gebundeld onder de naam ActiveRoles Management Shell for Active Directory.

Door middel van deze tool is het een fluitje van een cent om te achterhalen op welke accounts email forwarding is ingeschakeld en naar welk adres de email gestuurd wordt. De onderstaande code geeft weer hoe ik dit voor elkaar heb gekregen.

get-qadobject -IncludeAllProperties -LdapFilter '(altrecipient=*)' | select name, email,
@{ Name = "altrecipient";
Expression = {get-qadobject $_.altrecipient -IncludeAllProperties | %{$_.mail}}
} | sort name | format-table -auto

maandag 20 september 2010

vCenter database cleanup

Met vCenter 2.5 draaide ik regelmatig een SQL query die de historie van events en tasks opruimde. Deze procedure had ik van de VMware Knowledge Base, artikel nummer 1000125.

Onlangs upgrade ik een vCenter server naar versie 4.1 en liep daarna door de instellingen. Het viel me toen ineens op dat er onder de noemer 'Database Retention Policy' een functie beschikbaar is die hetzelfde doet.

Deze benadering is nog beter dan het SQL script, want om die uit te kunnen voeren moest eerst de vCenter service gestopt zijn.

donderdag 2 september 2010

Snel bestanden hernoemen

Stel, je hebt een grote verzameling bestanden met een onjuiste extentie en je wilt deze aanpassen. Hoe ga je dan te werk? Er zijn allehande tools om dit op Windows te doen, echter ik gebruik liever standaard tools die al in het OS aanwezig zijn. De onderstaande code is hiervan een mooi voorbeeld. Voer deze uit op een *nix machine en voor je het weet heb je resultaat!

for f in *txt.zip ; do mv $f `basename $f txt.zip`zip; done

Video conversie met opensource tools: Oude laptops

Voor sommigen is de 720p output van mijn fotocamera wat teveel van het goede. Bijvoorbeeld oude laptops gaan het niet redden. Voor deze apparaten verklein ik de videos naar een ander formaat met een 16:9 verhouding.

mencoder -oac copy -ovc lavc -lavcopts vcodec=mjpeg:aspect=16/9 -vf scale=854:480,expand=854:480 input.avi -o output.avi

Video conversie met opensource tools: Nokia 5230

Deze telefoon heeft al een beeldscherm met een verhouding van 16:9, dus daar hoeven geen extra maatregelen te worden genomen. De transcoding voorbeelden die ik op het internet tegenkwam voor deze telefoon (of z'n broers de 5800 en N97) gebruikten een 2-pass MP4 encoding met de tool mencoder. De syntax hiervan ziet er als volgt uit:

mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:acodec=libfaac:vcodec=mpeg4:abitrate=96:vbitrate=800:keyint=250:mbd=1:vqmax=10:lmax=10:vpass=1:turbo -ofps 25 -af lavcresample=44100 -vf harddup,scale=640:-3 'input.avi' -o 'output.mp4'

mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:acodec=libfaac:vcodec=mpeg4:abitrate=96:vbitrate=800:keyint=250:mbd=1:vqmax=10:lmax=10:vpass=2 -ofps 25 -af lavcresample=44100 -vf harddup,scale=640:-3 'input.avi' -o 'output.mp4'

dinsdag 17 augustus 2010

Controle beveiligingsinstellingen SQL Server

Tijdens een security audit kwam ik twee controles tegen die ik wel de moeite vond om even te bloggen. Ze liggen misschien wel erg voor de hand, maar daarom misschien des te meer een reden om ze eens tegen jouw eigen infrastructuur aan te houden.

  1. Logins zonder wachtwoord
    select name from sys.sql_logins where password_hash is null
    Als deze query geen resultaat geeft, dan kun je gerust adem halen. ;-)
  2. Logins die geen gebruik maken van de account policy
    select name from sys.sql_logins where type='S' and is_policy_checked <> '1'

Tip: Gebruik de systeem stored procedure sp_MSforeachdb om deze sql opdrachten over alle databases heen te draaien.

dinsdag 3 augustus 2010

Verwijderen defecte vCenter plug-ins

Onlangs heb ik een vCenter 2.5 installatie ge-upgrade naar vCenter 4.1. Echter omdat vCenter 4.1 alleen nog voor een 64-bits platform beschikbaar is, heb ik de installatie op een nieuwe machine uitgevoerd.

Toen ik de installatie uitvoerde kreeg ik een waarschuwing dat de VMware Converter plug-in niet compatible was en daarom niet ge-upgrade kon worden. Prima, want de rest van de installatie ging gewoon door. Echter na de installatie van vCenter bleef ik zitten met een plug-in die niet op de normale wijze ge-deïnstalleerd kon worden.

Gelukkig is er een methode om deze plug-in toch uit de vCenter configuratie te verwijderen.

  1. Open een webbrowser naar het volgende URL: http://<< vCenter naam of IP >>/mob.
  2. Klik op "content".
  3. Klik op "ExtensionManager".
  4. Kopieer de naam van de plug-in uit de lijst.
  5. Klik op "UnregisterExtension".
  6. Plak de naam van de plug-in in het invulveld en click op "Invoke Method".
  7. Sluit het pop-up scherm.
  8. Ververs het scherm waarin de geïnstalleerde plug-ins worden weergegeven.

Als het goed is, staat er nu één plug-in minder tussen.

zaterdag 10 juli 2010

Video conversie met opensource tools: Sony Ericsson W810i

Er circuleren de nodige tools op het internet die video bestanden kunnen converteren naar - onder andere - mobiele telefoons. Deze conversies kunnen ook prima worden uitgevoerd met open source software. Het is alleen wat minder eenvoudig om de juiste parameters te achterhalen.

In deze blogpost bespreek ik de videoconversie mijn mobiele telefoon, de Sony Ericsson W810i.

Voor dit model gebruik ik de tool ffmpeg. Ik ga ervanuit dat de bronbestanden een verhouding van 16:9 hebben. Vandaar dat ik met de parameters 'padtop' en 'padbottom' wat loze ruimte moet opvullen om uiteindelijk op de juiste resolutie van 176x220 uit te komen. De syntax ziet er als volgt uit:

ffmpeg -i input.avi -qmin 3 -qmax 6 -ar 44100 -ab 192k -ac 1 -acodec libfaac -vcodec h263 -r 12 -b 300k -s 176x100 -padtop 22 -padbottom 22 output.3gp

Mogelijk volgen er in de toekomst nog updates voor andere modellen.

donderdag 11 maart 2010

Uitlijnen van bestaande VMs met GParted

Als je zoals mij pas na het inrichten van een VMware infrastructuur bekend bent geraakt met het fenomeen partition alignment zul je vermoedelijk een hoop niet-uitgelijnde virtuele machines hebben.

NetApp heeft hier al tijdje een oplossing voor in de vorm van mbrscan/mbralign. Helaas is het gebruik van deze tools beperkt tot geregistreerde NetApp klanten met een actief support contract. Mocht je nu een compleet ander storage systeem gebruiken en toch je bestaande VMs willen uitlijnen, dan is hier ook een procedure voor.

Deze procedure vereist het gebruik van een GParted. Download de laatste versie van de LiveCD van de GParted website en koppel het gedownloade ISO bestand aan je VM. Start vervolgens de VM op van met LiveCD en voer de volgende stappen uit:
  • Selecteer de uit te lijnen partitie en selecteer move/resize in het menu.
  • Verklein de partitie met 10MB door dit aantal in te vullen bij de optie 'Free Space Preceding (MiB)'.
  • Druk op TAB en selecteer 'Resize/Move'.
  • Selecteer de optie 'Apply' via het menu en bevestig de opdracht.
  • Sluit nu de GParted applicatie af, maar herstart de VM nog niet!
  • Start een terminal venster.
  • Typ 'parted /dev/sda' om de parted command line editor te starten. Vervang eventueel /dev/sda met een schijftoewijzing naar keuze.
  • Maak een nieuwe partitie aan het begin van de schijf om de ruimte op te vullen tot het gewenste beginpunt van de uitgelijnde partitie. Als je bijvoorbeeld wilt dat jouw partitie op secotor 128 begint zul je een partitie moeten aanmaken die de sectoren 63-127 opvult. Typ hiervoor de volgende tekst in het terminal venster: mkpart primary 63s 127s
  • Verlaat de parted command line editor en start de GParted GUI weer op.
  • Verplaats en vergroot de uit te lijnen partitie zodat alle beschikbare ruimte gebruikt wordt. Het is ESSENTIEEL dat de optie "Round to Cylinders" wordt uitgevinkt!
  • Selecteer nu 'Apply All Operations.
  • Verwijder eventueel de hulppartitie aan het begin van de disk en herstart de VM.
Met dank aan Duncan van Yellow-Bricks.com die me via Twitter naar deze procedure leidde.

donderdag 7 januari 2010

Wijzigen schema voor vCenter database objecten

Als je bij het installeren van Virtual Center niet zo goed hebt opgelet, dan zou het kunnen dat alle database objecten onder een nieuw schema worden aangemaakt.

Dit is op zich geen bezwaar als je een geroutineerde DBA'er bent, maar een reguliere beheerder wil bij het uitvoeren van SQL opdrachten nog wel eens vergeten om van tevoren een 'EXECUTE AS LOGIN' opdracht te geven om in het juiste schema terecht te komen.

Als oud-beheerder van Pre-SQL 2005 systemen wil mij dit ook nog wel eens overkomen, dus vroeg ik mij af of het mogelijk was om achteraf alle Virtual Center objecten naar het vertrouwde dbo schema te verplaatsen.

Na enig zoekwerk in de online documentatie van SQL server bleek dat met het commando 'ALTER SCHEMA' een object verhuisd kan worden. Maar hoe weet je nu welke objecten verhuisd moeten worden? Voor Virtual Center 2.5 databases heb ik proefondervindelijk vastgesteld dat dit alleen objecten zijn van het type USER_TABLE, SQL_STORED_PROCEDURE en VIEW.

Als ik dit vertaal naar een SQL query dan krijg je het volgende resultaat:

select 'ALTER SCHEMA dbo TRANSFER ' + '['+SCHEMA_NAME(schema_id)+'].['+name+']' FROM sys.objects (nolock)
where type_desc in ('USER_TABLE', 'SQL_STORED_PROCEDURE', 'VIEW')
and is_ms_shipped = 0
and schema_id = schema_id ('vul hier uw schemanaam in')


Waarschijnlijk kan het nog makkelijker, want feitelijk genereer ik hier alleen de commando's die aan SQL server gevoed moeten worden voor de daadwerkelijke verhuizing. Ik kan me voorstellen dat iemand die handiger is met SQL queries dit ook rechtstreeks kan.

Zodra alle objecten netjes zijn verhuisd naar het dbo schema, vergeet dan niet om met het commando 'ALTER USER' het standaard schema van de gebruiker op dbo te zetten. Na deze handeling kan de Virtual Center service weer worden gestart en zou alles naar behoren moeten werken.

Update 2 maart 2010: Het gebruik van schema's anders dan dbo zorgt ook voor problemen bij een upgrade van VI3 naar vSphere. Zie KB1011386 voor meer informatie.