• Uncategorized
  • 0

Kopiera medlemskap med PowerShell (både dator- och användarobjekt)

Att jag nästintill gör allt i PowerShell nuförtiden är kanske inte en nyhet. Jag tycker inte om att hålla på att göra saker manuellt, speciellt inte när man ska lägga till gruppmedlemskap för objekt i Active Directory eller kopiera över medlemskap från ett objekt till ett annat.

Nu på sommarjobbet skulle 100-tals maskiner bytas ut, rätt stort arbete… Sen ska alla dessa maskiner få sina applikationer från SCCM. Lägga in grupper manuellt, oh no!!! Bara det tar ju en månad att göra.

Också enkelt när man anställt en ny medarbetare som ska ha samma programvaror som någon kollega, bara att fråga chefen vem som vi ska kopiera från och låt sedan magin ta över.

<#  
Copy-CopyComputerMembershipToNewComputer.ps1 
Pierre Estensköld Svensson 
2016-07-29 
Version 1.0 
#>

$sourcecomputer = Read-Host "Enter the name of the computer in Active Directory that you want to copy memberships from"

$memberships = Get-ADComputer $sourcecomputer -Properties memberof | Select-Object -ExpandProperty memberof
Write-Host "Copy membership from computer account $sourcecomputer"

# Apply the memberships to the destination computer account
$destinationcomputer = Read-Host "Enter the name of the computer in Active Directory that should get the memberships from source computer"
Write-Host "Copying membership from $sourcecomputer to $destinationcomputer"
Get-ADComputer $destinationcomputer | Add-ADPrincipalGroupMembership -MemberOf $memberships -Verbose -PassThru

Write-Host "Done.`nCheck if there is warnings, if there is - you might not have permission to add computers in those groups."
Pause

Men om man nu har Excel-fil med alla datornamn, både gamla och de nya som ska ersätta de gamla, hur gör man då?

Jo, så här.

Se till att filen är i .CSV, då kan vi importera den i PowerShell, för att göra det snyggare och mer lättläst väljer jag att använda tabb som delimiter och inte semikolon.

<#  
Copy-ADComputerMembershipToNewComputer_CSV-Version.ps1 
Pierre Estensköld Svensson 
2016-07-29 
Version 1.0 
#>

$Computers = Import-Csv C:Tempcomputers.csv -Delimiter "`t"
$nl = [Environment]::NewLine
$errorlog = "C:Temperrors.txt"

$Computers | foreach {

$Old = $_.OldComputer
$New = $_.NewComputer + '$'

$Membership = (Get-ADComputer $Old -Properties MemberOf).MemberOf

$Membership | foreach {
    try {
        Add-ADGroupMember -Identity $_ -Members $New -ErrorAction Continue
        Write-Host "Adding $New to $_" -ForegroundColor Green
    }
    catch {
        
            if((Get-ADComputer $Old -Properties MemberOf).MemberOf -eq "CN=Grupp,OU=OU1,DC=domain,DC=se"){
             "  WARNING! Unable to add computer {0} to group {1}. {2} `n  This warning is not logged!" -f $New, $_.TargetObject, $_
            }
            
            else{
                "  >> ERROR! Unable to add computer {0} to group {1}. {2}" -f $New, $_.TargetObject, $_
                $New + $nl + "{0}" -f $_.TargetObject + $nl | Out-File $errorlog -Append
            }
    }
}
}

Användare då?

De är ju inte lika roliga som datorer men vi måste hjälpa de också så de kan göra sitt arbete (och vi kan få mer häftiga IT-prylar).

 

<#  
Copy-ADUserMembershipToNewUser.ps1 
Pierre Estensköld Svensson 
2016-07-29 
Version 1.0 #>

$sourceuser = Read-Host "Enter the username of the user account in Active Directory that you want to copy memberships from"

$memberships = Get-ADUser $sourceuser -Properties memberof | Select-Object -ExpandProperty memberof
Write-Host "Copy membership from user account $sourceuser"

# Apply the memberships to the destination computer account
$destinationuser = Read-Host "Enter the username that should get the memberships from $sourceuser"
Write-Host "´nCopying membership from $sourceuser to $destinationuser´n" -ForegroundColor Green
Get-ADUser $destinationuser | Add-ADPrincipalGroupMembership -MemberOf $memberships -Verbose -PassThru

Write-Host "Done.`nCheck if there is warnings, if there is - you might not have permission to add users in those groups."
Pause

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: