| eventcount summarize=false index=* index=_* | dedup index | fields index
Auteur: Martijn Voogd
Orphaned ERE’s wissen
Orphaned ERE’s wissen met LithnetRMA
Import-Module LithnetRMA $query = New-XPathQuery -AttributeName "ResourceParent" -Operator IsNotPresent $expression = New-XPathExpression -ObjectType "ExpectedRuleEntry" -QueryObject $query $res = Search-Resources $expression foreach ($r in $res) { Get-Resource -ID $r.ObjectID | Remove-Resource }
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
Array omzetten in regel met scheidingstekens
Array omzetten naar een enkele regel met scheidingstekens.
$myArr = @("A","B","C") [String]::Join(";",$myArr)
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
Inbox regels verwijderen
Door de gebruiker ingestelde regels op zijn inbox verwijderen.
Get-InboxRule -Mailbox someone@corp.com | Remove-InboxRule
Agenda permissies van een ruimte mailbox opvragen
Agenda permissies van een ruimte mailbox opvragen.
Get-MailboxFolderPermission -Identity room@something.com:\Calendar | Select FolderName,User,AccessRights
Leden opvragen dynamische distributiegroep
Om onderstaande uit te kunnen voeren zijn voldoende rechten nodig in Exchange.
$dynGrp = Get-DynamicDistributionGroup "Medewerkers" Get-Recipient -RecipientPreviewFilter $dynGrp.RecipientFilter
LDAP query om alle gebruikers op te vragen die niet disabled zijn
LDAP query om gebruikers op te vragen die niet op disabled staan.
(&(objectCategory=person)(objectClass=user)(!UserAccountControl:1.2.840.113556.1.4.803:=2))
Namen en waardes van geneste objecten
Met behulp van psobject waardes en namen van onderliggende objecten weergeven.
foreach($o1 in $objectX.psobject.properties) { $o1.Name foreach($o2 in $o1.Value.psobject.properties) { $o2.Name $o2.Value } }
Een genest PowerShell custom object maken
Met het PSCustomObject is het mogelijk geneste objecten te maken.
[PSCustomObject]@{ PropertyName = [PSCustomObject]@{ NestedPropertyName = ‘NestedPropertyValue’ } }
Azure Active Directory Sync handmatig starten
Azure Active Directory Sync synchroniseert standaard elk half uur. Indien dat niet snel genoeg is kan je het synchronisatie proces met de hand starten.
Import-Module “C:\Program Files\Microsoft Azure AD Sync\Bin\ADSync\ADSync.psd1” Start-ADSyncSyncCycle -PolicyType Delta
Eenvoudig tekstbestanden doorzoeken op inhoud.
Met het commando select-string kan je eenvoudig de inhoud van tekstbestanden doorzoeken. Door het commando te combineren met het dir commando zijn hele mappenstructuren te doorzoeken.
dir *.log -r | select-string ZOEKTEKST
Recursief groepen tonen waarvan een gebruiker lid is
Methode om alle groepen te tonen waarvan een gebruiker direct of indirect lid van is.
USERNAME vervangen voor de samaccountname van de gebruiker.
(Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f (Get-ADuser USERNAME).distinguishedName)).Name
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.