Jeg havde en lille opgave den anden aften, flyt en folderRedirection SBS share fra en server til ny server. 

Microsoft har efterhånder en del gode guides på området.
https://docs.microsoft.com/en-us/windows-server/storage/folder-redirection/deploy-folder-redirection

og

 https://docs.microsoft.com/en-us/windows-server/storage/folder-redirection/enable-optimized-moving

Min udfordring var blot at styre hvem som blev flyttet hvornår, f.eks. ønskede jeg ikke at flytte laptop brugere med det sammen, blot alm. desktop, dertil var der nogle historiske konties som også skulle flyttes der var placeret i en alternativ OU.

Tilformålet lavede jeg et powershell script, der bruge data fra Lansweeper, med hvem var laptop og desktop bruger, hvem var shared pc bruger osv. og så til sidst kaldte jeg nedestående funktion, der blot med initialerne, i dette tilfælde samaccountname, kunne flytt filerne til nyt share og melde brugen i den nye folder rederiect adgruppe, der tildele gpo'en.

function MoveFiles($Usrinits){
#Robocopy /B \\sbs01\d$\Users\FolderRedirections\lwh D:\UserData\FolderRedir\lwh /Copyall /MIR /EFSRAW
## https://docs.microsoft.com/en-us/windows-server/storage/folder-redirection/enable-optimized-moving

# Build paths....
$source = "\\sbs01\d$\Users\FolderRedirections\"+$Usrinits
$dest = "D:\UserData\FolderRedir\"+$Usrinits

#copy only if destination do not exist ( robocopy is runneing /MIR )
if( (Test-Path $source ) -and (!( Test-Path $dest)))
{

$args = "/B " + $source + " " + $dest + " /Copyall /MIR /EFSRAW"
write-host "copying files : " $args
$p = Start-Process "Robocopy.exe" -ArgumentList $args -Wait
$p.ExitCode

#Add user to adgroup for new FolderRedir
Add-ADGroupMember -Identity "GPO_User_FolderReDir" -Members $Usrinits

}

 

En lille kode snipped som gør det muligt at i powershell app deployment toolkit at undersøge om en pc har en adgruppe rettighede og derefter køre en installation
normalt ville man måske benytte get-adgroupmember funktionen, dog kræver dette at ad tools er installeret, hvilket de normalt vis ikke er på alle alm. workstations.


$ComputerassignedGroups = ([adsisearcher]"(&(objectCategory=computer)(cn=$env:COMPUTERNAME))").FindOne().Properties.memberof -replace '^CN=([^,]+).+$','$1'

$Computergroup = "APP_applikationsnavn"

if($ComputerassignedGroups.contains($Computergroup) )
{

$msi = "$dirfiles\FakturaController-1.0.msi"
execute-MSI -Action Install -Path $msi
}

Powershell command til at finde bruger som er oprettet efter en givende dato, i eksemplet 1 maj 2017

 

Get-ADUser -Filter {SamAccountName -like "*"}  -Properties UserPrincipalName,displayname,EmailAddress,division,department,Company,streetAddress,City,postalCode,DistinguishedName,whencreated -SearchBase "OU=Users,DC=prod,DC=name,DC=localnet"  -Server Domaincontroler.name.localnet | ? { $_.whenCreated -ge (get-date "May 1, 2017")}| Select UserPrincipalName,displayname,division,department,Company,streetAddress,City,postalCode | Export-Csv $csvname 

Et par linjer kode til at teste for om et script er startet op med admin credenitials, scriptet er fundet på denne MS blog

 

If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
    [Security.Principal.WindowsBuiltInRole] “Administrator”))
{
    Write-Warning “You do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!”
    Break
}

Jeg har skulle skrive til windows evenloggen for at data kunne samles op af eventforward, her er hvordan man får oprettet en ny event source på den pæne måde og derefter skriver til denne. 



$EventlogSourceName = “MyJob”

if ([System.Diagnostics.EventLog]::SourceExists($EventlogSourceName) -eq $false) {

    New-EventLog –LogName Application –Source $EventlogSourceName

 }

   Write-EventLog –LogName Application –Source $EventlogSourceName –EntryType Information –EventID 1 –Message “My Event Message ”