scripts.team-holm.net
Hovedsiden
PowerShell Scripts
Mass_Scripts


Dette er alt scripts for massehåndtering av diverse ting. Det vil si hådtering av en større mengde objekter av gangen.
Se kommentarene i scriptene for mer informasjon.

MassCountEnabledDisabledUsers.ps1
#Atle Holm - 2009
#Teller antall disabled og enabled brukere i domenet

$Enabled = 0
$Disabled = 0
 
Get-QADUser -enabled -sl 0 | %{$Enabled++}
Get-QADUser -disabled -sl 0 | %{$disabled++}
 
"There are $Enabled enabled users and $Disabled disabled users.`n"

MassEnableUsers.ps1
#Atle Holm - 2009
#Sjekker om det er lagt ved et argument, som trengs
if (!$args) {
    Write-Host "Dette scriptet brukes feks slik:"
   Write-Host "MassEnableUsers.ps1 C:\users.txt"
    Write-Host "Deretter vil scriptet spørre om nødvendige detaljer."
    break
} elseif ($args -match "/\?{1}") {
    Write-Host "Dette scriptet disabler alle brukere angitt i en tekstfil som argument."
   Write-Host "Hver linje i tekstfilen må være av type domene\bruker"
   break
}
if ($args.count -gt 1) {
   Write-Host "Du kan bare supplere ett argument med dette scriptet."
   Write-Host "Dette argumentet er da filen som lister brukerne scriptet skal behandle."
   break
}
$users = Get-Content $args
foreach ($user in $users) {
   enable-QADUser $user
}

MassDisableUsers.ps1
#Atle Holm - 2009
if (!$args) {
    Write-Host "Dette scriptet brukes feks slik:"
   Write-Host "MassDisableUsers.ps1 C:\users.txt"
    Write-Host "Deretter vil scriptet spørre om nødvendige detaljer."
    break
} elseif ($args -match "/\?{1}") {
    Write-Host "Dette scriptet disabler alle brukere angitt i en tekstfil som argument."
   Write-Host "Hver linje i tekstfilen må være av type domene\bruker"
   break
}
if ($args.count -gt 1) {
   Write-Host "Du kan bare supplere ett argument med dette scriptet."
   Write-Host "Dette argumentet er da filen som lister brukerne scriptet skal behandle."
   break
}
$users = Get-Content $args
foreach ($user in $users) {
   disable-QADUser $user
}

MassRemoveUsers.ps1
#Atle Holm - 2009

#Dette scriptet trenger tre filer tilgjengelige, en tekstfil for grupper, en for brukernes navn og en for logonnavn
#Det kan ikke eksistere blanke "characters" etter brukernavn eller andre navn i filene

$USERNAMESLOCATION = read-host "Skriv inn sti til tekstfil som inneholder brukernavn"
$USERNAMES = get-content $USERNAMESLOCATION 2>> $er

if ($?) {
   foreach ($USERNAME in $USERNAMES) {      
      remove-QADObject $USERNAME
   }
} else {
   write-output "An error occured: $er"
}

MassMoveUsers.ps1
#Atle Holm - 2009
if (!$args) {
    Write-Host "Dette scriptet brukes feks slik:"
   Write-Host "MassMoveUsers.ps1 C:\users.txt"
    Write-Host "Deretter vil scriptet spørre om nødvendige detaljer."
    Write-Host "Feks hvor brukerne skal flyttes til."
    break
} elseif ($args -match "/\?{1}") {
    Write-Host "Dette scriptet kopierer alle brukere til en OU bestemt av bruker."
   Write-Host "Hver linje i tekstfilen må være av type domene\bruker"
   break
}
if ($args.count -gt 1) {
   Write-Host "Du kan bare supplere ett argument med dette scriptet."
   Write-Host "Dette argumentet er da filen som lister brukerne scriptet skal behandle."
   break
}

$fullPath = Read-Host "Skriv inn domene og AD sti til OU der brukere skal flyttes (feks cust.providernet.no/Users)"
$users = Get-Content $args

foreach ($user in $users) {
   move-QADObject $user -NewParentContainer $fullPath
}

RemoteMassAdmLocalAdmin.ps1
#Atle Holm - 2009

Remove-Item RemoteMassAdmLocalAdmin.log 2>> $NULL

Function DeleteUser {
   $SERVERS = Get-Content servers.txt
   foreach ($SERVER in $SERVERS) { 
      $userNamesToDel = Get-Content users.txt
      $group =[ADSI]"WinNT://$SERVER/Administrators,group"
      foreach ($userNameToDel in $userNamesToDel) { 
         $group.remove("WinNT://$env:userdomain/$userNameToDel") 2>> $er
         if ($?) {
            Write-Host "User $userNameToDel deleted from local Administrators at $Server"
            $date = date
            Write-Output "$date User $userNameToDel deleted from local Administrators at $Server." >> RemoteMassAdmLocalAdmin.log
         } else { Write-Host $er }
      }
   } 
}

Function AddUser {
   $SERVERS = Get-Content servers.txt
   foreach ($SERVER in $SERVERS) {
      echo "Trying: $SERVER" 
      $userNamesToAdd = Get-Content users.txt
      $group =[ADSI]"WinNT://$SERVER/Administrators,group"
      foreach ($userNameToAdd in $userNamesToAdd) { 
         echo "Adding: $userNameToAdd"
         $group.add("WinNT://$env:userdomain/$userNameToAdd") 2>> $er
         if ($?) { 
            Write-Host "User $userNameToAdd added to local Administrators at $Server."
            $date = date
            Write-Output "$date User $userNameToAdd added to local Administrators at $Server." >> RemoteMassAdmLocalAdmin.log
         } else { Write-Host $er }
      }
   } 
}

Function ListUsers {
   $SERVERS = Get-Content servers.txt
   foreach ($SERVER in $SERVERS) { 
      $group =[ADSI]"WinNT://$SERVER/Administrators,group" 
      $members = @($group.psbase.Invoke("Members"))
      if ($?) { 
         Write-Host ""
         Write-Host "*Listing users from local Administrators at `"$Server`" :"
         Write-Host ""
         $date = date
         Write-Output "$date Users from local Administrators at $Server listed." >> RemoteMassAdmLocalAdmin.log
         $members | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
      } else { Write-Host $er }   
   } 
}

if ($Args.count -eq 1) {
   if ($Args -eq 1) { DeleteUser }
   if ($Args -eq 2) { AddUser }
   if ($Args -eq 3) { ListUsers }
} elseif ($Args.count -ne 1) {
   Write-Output "Usage: RemoteMassAdmLocalAdmin.ps1 n"
   Write-Output "n = 1 : Delete users listed in users.txt from local Administrators groups at servers listed in servers.txt"
   Write-Output "n = 2 : Add users listed in users.txt to local Administrators groups at servers listed in servers.txt"
   Write-Output "n = 3 : List users listed in local Administrators groups at servers listed in servers.txt"
}

#users.txt must include information of the type:    domainname\userName
#                     domainname\userName
#                     domainname\userName
#servers.txt must include information of the type:   machinename
#                     machinename
#                     machinename

MassCreateUsers.ps1
#Atle Holm - 2009
#Dette scriptet trenger en fil tilgjengelig, en tekstfil som inneholder informasjon av typen:
#     Ola Nordmann ,brukerkonto,passord
#Scriptet krever Quests CMDlets

$OULOCATION = read-host "Skriv LDAP sti til OU hvor brukere opprettes(feks:company.com/UserOU)"

if (!$args[0]) {
    $NAMESLOCATION = read-host "Skriv inn sti til tekstfil som inneholder brukernavn og logon navn"
} else {
    $NAMESLOCATION = $args[0]
}

if ($?) {
    $WORKBLOCK = get-content $NAMESLOCATION
    foreach ($WORK in $WORKBLOCK) {
        $NAME = $WORK.split(",")[0]
       $USERNAME = $WORK.split(",")[1]
        $PASSWORD = $WORK.split(",")[2]
        write-host "Creating user $USERNAME `n Name: $NAME `n Password: $PASSWORD"
        new-QADUser -name $NAME -DisplayName $NAME -ParentContainer $OULOCATION -SamAccountName $USERNAME -UserPassword $PASSWORD
        Set-QADUser $USERNAME -userMustChangePassword $true
        $date = date
        write-output "$date Bruker $USERNAME opprettet med passord: $PASSWORD" >> MassCreateUsers.log
    }
} 
else {
    write-output "An error occured: $er"
}

MassCheckUserStatus.ps1
#Atle Holm - 2009
#Checks if users are in AD and if they are enabled or disabled, if they are locked out or not.
if (!$args) {
    Write-Host "Dette scriptet brukes feks slik:"
   Write-Host "MassCheckUserStatus.ps1 C:\users.txt"
    break
} elseif ($args -match "/\?{1}") {
    Write-Host "Dette scriptet sjekker om alle brukere angitt i en tekstfil som argument er i AD og om de er enabled/disabled."
   Write-Host "Også om de er låst ute eller ikke. Resultat pipes ut til AD.txt og NotAd.txt i stående katalog."
   Write-Host "Hver linje i tekstfilen må vøre av type domene\bruker"
   break
}
if ($args.count -gt 1) {
   Write-Host "Du kan bare supplere ett argument med dette scriptet."
   Write-Host "Dette argumentet er da filen som lister brukerne scriptet skal behandle."
   break
}
$Users = Get-Content $args
$domene = Read-Host "Skriv inn domenet du operer i "
foreach ($User in $Users) {
   $Container = Get-QADUser $User

   if (($domene + "\" + $Container.SamAccountName) -eq $User) {
      Write-Output "<-->" >> AD.txt
      
      Write-Output ($Container.SamAccountName + " is in AD") >> AD.txt
      if ($Container.AccountIsDisabled) {Write-Output "$User Account Disabled Status: Disabled" >> AD.txt}
      if (!$Container.AccountIsDisabled) {Write-Output "$User Account Disabled Status: Not Disabled" >> AD.txt}
      if ($Container.AccountIsLockedOut) {Write-Output "$User Account Locked Out Status: Locked Out" >> AD.txt}
      if (!$Container.AccountIsLockedOut) {Write-Output "$User Account Locked Out Status: Not Locked Out" >> AD.txt}
      Write-Output "<-->" >> AD.txt
      Write-Output "<-->"
   } else {
      Write-Output "$User is not in AD" >> NotAD.txt
   }
}
Write-Output "Se NotAD.txt og AD.txt for detaljer."

Perl
VisualBasic
BASH
Powershell