Kristoffer Qvists blogg om allt möjligt

Etikett: script

Kontrollera medlemskap av Shadow Groups

Shadow groups används i Active Directory (AD) för att enklare administrera olika konton som är; satta i olika s.k. Organizational Units, OU:n. Ibland flyttar man användare över OU:n, av olika orsaker, och detta skript gör det enkelt att kontrollera att varje användare tillhör rätt grupp och OU. För automatisk kontroll bör detta skript schemaläggas.

  • PowerShell är installerat
  • Alla grupper har SG_ som prefix

I skriptet finns alla grupper i example.com/Accounts/Groups/Roles, medan användarna finns i deras respektive OU i example.com/Accounts.

Modifiering av skriptet

Då skriptet är licenserat i enlighet med Apache-licensen version 2 (se länk till höger av sidan) kan du göra i princip allt du vill med det. För att ändra katalogen där grupperna existerar ska variabeln $groups modifieras vid flaggan -SearchBase, och $base till platsen där alla OU:n med deras konton existerar.

Om du undrar något över detta skript och/eller vill ha hjälp med det kan du skicka mig ett mail. Dock kan jag inte lova att jag kan svara på det direkt, och om jag finner det intressant att publicera på bloggen kan jag komma att göra det med tillhörande svar.

############ METADATA ############
# Author: Kristoffer Qvist
# Description: Control that
# correct users, in the
# corresponding OU are set to
# their correct shadow group.
##################################
Import-Module ActiveDirectory
$groups = Get-ADGroup -Filter{name -like "SG_*"} -SearchBase "OU=Roles,OU=Groups,OU=Accounts,DC=example,DC=com"

foreach ($group in $groups) {
    try {
        # This block adds users to their correct Shadow Groups
        $groupSAM = $group.SamAccountName
        $OU       = $groupSAM.Replace("SG_", "")
        $base     = "OU=$OU,OU=Accounts,DC=example,DC=com"
        $users    = Get-ADUser -Filter * -SearchBase $base -Properties DistinguishedName | Select -ExpandPropert DistinguishedName
        foreach ($user in $users) {
            Add-ADGroupMember -Identity $groupSAM -Members $user
        }

        # This block removes users from wrong Shadow Groups
        $groupMember = get-adgroupmember -identity $groupSAM
        foreach ($member in $groupMember) {
            $dgn    = $member.distinguishedName
            $thisOU = Get-ADUser -LDAPFilter "(samAccountType=805306368)" -SearchBase $base
            if ($thisOU -match $dgn) {
                # Nothing to be done ; $dgn should match $thisOU
            } else {
                Remove-ADGroupMember -Identity $groupSAM -Members $dgn -confirm:$false
            }
        } 
    } catch {
        "There was an error adding/removing an user to the correct OU or shadow group. ($group)"
    }
}
# It's good practice to remove the module used
Remove-Module ActiveDirectory

Bash-skript för att förflytta filer

Själv har jag haft behov av att förflytta filer mellan olika mappar i min Linux-dator. Då kan det vara skönt att använda sig utav skript som automatiserar förflyttningen helt och hållet (särskilt om man enbart har CLI). Det är skrivet i vanligt shellspråk (bash) och består av enbart några rader kod.

#!/bin/sh
############ METADATA ############
# Author: Kristoffer Qvist
# Description: Moves file(s) to
# predestined destination.
##################################

destination="/path/to/destination"

for file in "$@"; do
    mv "$file" "$destination/$file"
done

Filerna som skall förflyttas finns är argument som skrivs efter skriptnamnet; alltså skript.sh fil.a fil.b som gör att dessa (det vill säga fil.a och fil.b) förflyttas till vald destination, som har skrivits i variabeln ”destination”. Detta skript gör ingen felsökning, och jag tar inget ansvar för eventuella fel som kan inträffa (nej, inte heller förlust av tangentbord eller guldfiskar).

© 2022 qvi.st

Tema av Anders NorenUpp ↑