Hashtable doorlopen met GetEnumerator()

Meestal doorloop je een hastable doormiddel van de sleutels of de waardes. Een andere methode is om de lijst in zijn geheel door te lopen via de functie GetEnumerator().

$myList = @{}
$myList.Add("sleutel01","waarde01")
$myList.Add("sleutel02","waarde02")
$myList.Add("sleutel03","waarde03")

Lijst doorlopen met GetEnumerator()

PS C:\> $myList.GetEnumerator() | % { "$($_.Key) $($_.Value)" }
sleutel01 waarde01
sleutel03 waarde03
sleutel02 waarde02

Lijst doorlopen via het sleutelveld

PS C:\> $myList.Keys | % { "$($_) $($myList[$_])" }
sleutel01 waarde01
sleutel03 waarde03
sleutel02 waarde02

Opmaak aanpassen van een cijferreeks uit een string

Powershell biedt met de format operator enorm veel mogelijkheden om de uitvoer te manipuleren. Deze functionaliteit kan handig gebruikt worden om een string met een cijferreeks anders op te maken. Denk hierbij aan bijvoorbeeld telefoonnummers, datum etc.

Om de cijferreeks op te kunnen maken moet de string eerst omgezet worden naar een integer waarde. Afhankelijk van de lengte van de cijferreeks kan er gekozen worden voor een 32 of 64 bits integer. (ToInt32 / ToInt64). De waarde 10 geeft aan dat de input bestaat uit een decimaal getal.

Punten en komma’s kunnen fout geïnterpreteerd worden door ToInt. Verwijder deze eerst uit de string. ToInt zal niet gehele getallen afronden naar een geheel getal. Het min teken is niet toegestaan. ToInt kan alleen met positieve getallen werken.

Datum omzetten van 20180128 naar 2018-01-28:

$a = "20180128"
"{0:####-##-##}" -f [convert]::ToInt32($a,10)

Telefoonnummer omzetten van 0031651541301 naar (+31) 6 51 54 1301:

$a = "0031651541301"
"{0:(+##) # ## ## ####}"  -f [convert]::ToInt64($a,10)

Active Directory Drive AD:

Één van de leuke mogelijkheden van powershell is het kunnen gebruiken van Active Directory als een bestandsysteem. Dat maakt het gebruik van het commando ls/get-childitem in Active Directory mogelijk.

Active Directory Drive opstarten

Import-Module ActiveDirectory
cd AD:

Opvragen objecten in OU met een bepaalde tekst in de naam

ls -Path *zoektekst* | Select Name

Opvragen objecten recursief

ls -Recurse

Alle mailboxen tonen waarop een gebruiker rechten heeft

Handig powershell commando wat een overzicht geeft van alle mailboxen waarop een specifieke gebruiker rechten heeft. In grote omgevingen kan het even duren voordat het script klaar is.

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission -User 'user@corp.com' | Format-List -Property Identity, AccessRights, Deny

Minder betrouwbaar, maar wel stukken sneller is het opvragen van het attribuut msExchDelegateListBL uit Active Directory.

Get-ADUser -Identity 'username' -Properties msExchDelegateListBL | Select-Object -ExpandProperty msExchDelegateListBL

First and second rule

“The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency.
The second is that automation applied to an inefficient operation will magnify the inefficiency.”

Bill Gates

Enkel attribuut wissen in FIM met powershell

Een attribuut wissen in FIM gaat niet zoals je zou verwachten. Normaal gesproken zou je een Null waarde of iets dergelijks naar het attribuut schrijven. FIM accepteert dit echter niet. Het wissen gebeurt juist door geen waarde voor het attribuut op te geven en hem dan terug te schrijven.

Dit powershell script wist het attribuut ‘ProfileFolderPath’ voor personen waarvan de DisplayName begint met een k.

add-pssnapin FIMAutomation

$personlist = Export-FIMConfig -customconfig "/Person[starts-with(DisplayName,'k') and starts-with(ProfileFolderPath,'%')]" -OnlyBaseResources

If ($personlist -eq $null) { Write-Host "There are no people" ; exit }

foreach ($person in $personlist)
{
$memberlist=($person.ResourceManagementObject.ResourceManagementAttributes).Values

$importObject = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportObject
$importObject.ObjectType = "Person"
$importObject.TargetObjectIdentifier = $person.ResourceManagementObject.ObjectIdentifier
$importObject.SourceObjectIdentifier = $person.ResourceManagementObject.ObjectIdentifier
$importObject.State = 1

foreach ($member in $memberlist)
{

$importChange = New-Object Microsoft.ResourceManagement.Automation.ObjectModel.ImportChange
$importChange.Operation = [Microsoft.ResourceManagement.Automation.ObjectModel.ImportOperation]::Replace
$importChange.AttributeName = "ProfileFolderPath"
$importChange.FullyResolved = 1
$importChange.Locale = "Invariant"
$importObject.Changes += $importChange
}

$importObject | Import-FIMConfig
}

Woorden afbreken met soft hyphen

Bij responsive websites worden lange woorden soms op de verkeerde plek afgebroken. Met de soft hyphen ­ kan vooraf binnen een woord aangegeven worden waar woorden afgebroken dienen te worden. Dit voorkomt lelijke afbrekingen als een site op een mobiel device bekeken wordt.

Translate »