Category Archives: Microsoft

Artikels die een relatie hebben met Microsoft producten

Volgnummer bijhouden in een CSV file

Import-module 'ActiveDirectory'
 $getadusers = @()
 $filter = @()
 $samaccountnamelijst = @()
 $Header = 'Samaccountname'
 $CSV = '.\Gemeentenet.csv'
 $Extension = $null
 $import = @()
 Add-Content -Value $Header -Path $CSV
 $getadusers = Get-aduser -filter *
 foreach ($entry in $getadusers){if ($entry -ne $null){$samaccountnamelijst += $entry.samaccountname}}
 foreach ($sam in $samaccountnamelijst){Add-Content -Value $sam -Path $CSV}
 $Deelnemerlijst = @()
 $allusers = import-csv $csv
 foreach ($Deelnemeruser in $allusers){if ($Deelnemeruser -match $deelnemer){$Deelnemerlijst += $Deelnemeruser}}
 $Deelnemerlijst | export-csv .\$Deelnemer.csv

$entry = $null
$username = 'othext'
 $CSV = '.\Gemeentenet.csv'
 $import = @()
 $filter = @()
 $import = import-csv $csv
 foreach ($entry in $import){if ($entry -match $username){$filter += $entry.samaccountname}}
 $filter = $filter -split "@{samaccountname=" |sort
 $filter = $filter -split "$username" | sort
 $filter = $filter -split "}" | Sort -Descending
 $nummer = [int]$filter[0]
 $nummer++

Add-content -Value $volledigesamaccountname -path $csv

XLSX aanmaken in Powershell

$csvs = Get-ChildItem .* -Include *.csv
 $y=$csvs.Count
 Write-Host “Detected the following CSV files: ($y)”
 foreach ($csv in $csvs)
 {
 Write-Host ” “$csv.Name
 }
 $outputfilename = read-host “Please enter the output file name: “
 Write-Host Creating: $outputfilename
 $excelapp = new-object -comobject Excel.Application
 $excelapp.sheetsInNewWorkbook = $csvs.Count
 $xlsx = $excelapp.Workbooks.Add()
 $sheet=1

foreach ($csv in $csvs)
 {
 $row=1
 $column=1
 $worksheet = $xlsx.Worksheets.Item($sheet)
 $worksheet.Name = $csv.Name
 $file = (Get-Content $csv)
 foreach($line in $file)
 {
 $linecontents=$line -split ‘,(?!s*w+”)’
 foreach($cell in $linecontents)
 {
 $worksheet.Cells.Item($row,$column) = $cell
 $column++
 }
 $column=1
 $row++
 }
 $sheet++
 }

$xlsx.SaveAs($outputfilename)
 $excelapp.quit()

Custom query voor users met

Het is mogelijk om Active Directory Users and Computers (dsa.msc) een custom query te doen. In de situatie dat je een groep gebruikers hebt aangemaakt en deze weer moet verwijderen of moet toevoegen aan een groep. Voor de situatie dat je wil weten welke users zijn aangemaakt na 27 oktober 2013 voer je volgend commando in:

 

(objectCategory=user)(whenCreated>=20131027000000.0Z)

autodiscover DNS zones aanmaken

Om een autodiscover record aan te maken middels een command kunnen de volgende commando’s uitgevoerd worden.  recordnaam moet vervangen wordt voor het subdomein en domein voor het domeinnaam in kwestie. Daarnaast moet er eerst een primary zone aangemaakt worden of een record in een publieke DNS server.

dnscmd . /zoneadd _recordnaam._tcp.domein.nl. /dsprimary
dnscmd . /recordadd _recordnaam._tcp.domein.nl. @ SRV 10 1 443 recordnaam.domein.nl.

Outlook 2010 kan dan een foutmelding geven zoals is beschreven in Microsoft KB2480582
. Maak hiervoor een REG_SZ sleutel aan binnen het gebruikersregister met bijvoorbeeld RES Workspace Manager met in de KB beschreven waardes.

Recipients of senders filteren op basis van wildcards

Soms moet je weten hoeveel er wordt gestuurd naar *@hotmail.com of *@outlook.com. Dit kan op de volgende manier

Get-MessageTrackingLog -ResultSize Unlimited -Start "9/1/2013" -End "9/12/2013" | where{$_.recipients -like "*@live.nl"} | select-object Timestamp,SourceContext,Source,EventId,MessageSubject,Sender,{$_.Recipients} >

Of voor ontvangen e-mail:

Get-MessageTrackingLog -ResultSize Unlimited -Start "5/1/2011" -End "5/12/2011" | where{$_.sender -like "*@example.com"} | select-object Timestamp,SourceContext,Source,EventId,MessageSubject,Sender,{$_.Recipients} | export-csv C:ExchangeLogResults.txt

Exchange SAN Certificaat aanvragen

Een Exchange certificaat aanvragen op basis van SAN (Subject Alternative Name) is een vrij eenvoudig. Hieronder een voorbeeld:

New-ExchangeCertificate -FriendlyName 'webmail.test.nl' -GenerateRequest -PrivateKeyExportable $true -KeySize '2048' -SubjectName 'C=NL,S="Zuid-Holland",L="Rotterdam",O="Bedrijfsnaam uit de KvK",OU="IT",CN=webmail.test.nl' -DomainName 'webmail.test.nl','autodiscover.test.nl','smtp.test.nl','autodiscover.test2.nl','webmail.test2.nl','outlookanywhere.test.nl','clusternaam.test.nl' -Server 'server waarop de aanvraag gedaan wordt'

Exchange HUB servers

Wanneer er een e-mail wordt verzonden in een Microsoft Exchange 2010 organisatie gaat het transport proces als volgt:

Exchange kijkt binnen de Active Directory Site waar het mailtje wordt gesubmit naar een beschikbare HUB Transport server om de e-mail te versturen. De HUB Transport servers accepteren de e-mail als de services draaien. Er wordt niet gekeken naar de mogelijkheid om het mailtje daadwerkelijk te versturen. Als de HUB Transport server een Send connector heeft is dat voldoende. Stel er is geen Send connector toegewezen met als address space * dan kan de HUB server het mailtje niet kwijt. Er is makkelijk in de Exchange console te kijken naar de wachtrij binnen Exchange.

Get-TransportServer | Get-Queue

Er wordt dan een lijst uitgedraaid met de queue’s van alle server binnen de Exchange organisatie. Er is dus ook makkelijk te zien welke server mogelijk een probleem heeft de mail te versturen.

Andere nuttige commando’s zijn:

Overzicht uitdraaien van users op een mailbox server
Get-MailboxDatabase "Mailbox Database Naam" | Get-Mailbox

Updates bijwerken via batch

Bij gebrek aan een WSUS server kunnen updates worden uitgerold via een batch script. De .Net Frameworks updates en updates als Malicious Software Removal Tools of andere Windows installer packages kunnen middels onderstaand script uitgevoerd worden:

@ECHO OFF


Set DataDir=E:InstallHotfixes

:: Put Terminal server in install mode
CHANGE USER /INSTALL
ECHO.


CD /d %DataDir%
FOR /f %%i in ('dir *.exe /b') DO %%i /quiet /norestart


:: Put Terminal server back in execute mode
ECHO.
CHANGE USER /EXECUTE

:: Just wait a few secs before exiting this script, or Altiris will report error 1 after exiting this script.
:: May be caused by previous statement and directly exiting the script, therefore this delay.
:: Use the ping command for a delay.


PING localhost >nul

Voor updates die geen echte installer hebben kan het volgende script worden uitgevoerd:
@ECHO OFF

Set DataDir=E:InstallHotfixes08

:: Put Terminal server in install mode
CHANGE USER /INSTALL
ECHO.

CD /d %DataDir%
FOR /f %%i in ('dir *.exe /b') DO %%i /z /u

:: Put Terminal server back in execute mode
ECHO.
CHANGE USER /EXECUTE

:: Just wait a few secs before exiting this script, or Altiris will report error 1 after exiting this script.
:: May be caused by previous statement and directly exiting the script, therefore this delay.
:: Use the ping command for a delay.

PING localhost >nul

Deze scripts zijn handig voor Terminal server. Als je niet ingelogd bent op een Terminal server kan je de install mode achterwegen laten.

Query Inheritance op User Object in AD

De Get-ADuser heeft niet de mogelijkheid om op inheritance een query te doen. Laat staan het vinkje Include inheritable permissions from this object’s parent in het security tabblad.

Quest heeft CMDlet’s gemaakt die gratis zijn en die hier prima gebruikt kunnen worden. Het commando dat uitgevoerd moet worden is het volgende:

 
Get-QADUser -SizeLimit 0 | Where-Object {$_.DirectoryEntry.psbase.ObjectSecurity.AreAccessRulesProtected }

 

Om eventueel naar een ander domein te verbinden kan het volgende commando gebruikt worden:

Connect-QADService -service ''

Om de gevonden accounts ook daadwerkelijk aan te passen kan bovenstaande code ook uitgebreid worden:

Get-QADUser -SizeLimit 0 | Where-Object {$_.DirectoryEntry.psbase.ObjectSecurity.AreAccessRulesProtected } | Set-QADObjectSecurity -UnlockInheritance