Latest Posts

Mass Edit ADSI Values

I got tired of having to manually edit ADSI values for more then one user so I wrote a PowerShell script to automate the process. I even went to the extent to include a display of the values that were changed at the end. The main purpose of this script was to edit the msExchHideFromAddressLists value when the user is placed in a specific OU. I ended up deciding to make my script in a way so that I could just change 3 values and it will do all the work.

Here’s the script.

$value = "msExchHideFromAddressLists"
$ou = "OU=Disabled Users,OU=Contoso,DC=contoso,DC=local"
$yesno = $true

$search = Get-ADUser -filter * -searchbase $ou

Foreach ($U in $search) {
Set-ADUser $U -replace @{$value=$yesno}
}

Write-Output "Results"

Get-ADUser -filter {($value -eq $yesno)} -searchbase $ou -properties $value | Select-Object UserPrincipalName, $value

Just alter $value, $ou, and $yesno to suit your needs and the script does the rest.

Swap Office 365 Licences

I needed to remove some expired Office 365 licences that were expired to the point where I couldn’t do it via the admin interface so I wrote a PowerShell script to automate it.

You will want to run Get-MsolAccountSku this will list out the various SKUs your account has. something like this

tenant:VISIOCLIENT
tenant:PROJECTCLIENT
tenant:EXCHANGESTANDARD
tenant:O365_BUSINESS_PREMIUM
tenant:OFFICESUBSCRIPTION
tenant:PROJECTPROFESSIONAL

Just change the values in the script below to match what product you want to remove and replace it with and then run it.

$remove = "tenant:EXCHANGESTANDARD"
$add = "tenant:O365_BUSINESS_PREMIUM"

$swap = get-MSOLUser -All | where {$_.isLicensed -eq "TRUE" -and $_.Licenses.AccountSKUID -eq "$remove"}

Foreach ($User in $swap) {
Set-MsolUserLicense -UserPrincipalName $User.UserPrincipalName -RemoveLicenses "$remove" -AddLicenses $add
}

That is basically it. It will just run and swap the licences.

Find files and folders

Recently I needed to find all files and folders containing two spaces, normally I would use something like a file renamer but in this case for various reasons I just needed to generate a list. Eventually I ended up figuring out a PowerShell command to do it.

Here’s the code I used to do it

get-childitem -recurse | where-object {$_ -match ' '} | select-object FullName | export-csv -notypeinformation -delimiter '|' C:\file.csv

The same code can be used to find anything. Just replace the two spaces with whatever you need to find.

copy files and create directories

I needed to come up with a solution to copy a directory/file to a specific location but I also needed to account for the fact that it might not be created so I needed it to also create the necessary folder structure and if the file existed I needed it to overwrite it.

This is the batch script I came up with

if not exist %appdata%\PROGRAM\settings mkdir %appdata%\PROGRAM\settings
copy "\\SERVER\SHARED\source" %appdata%\PROGRAM\settings /y

Basically what the script is doing is checking C:\Users\USERNAME\AppData\Roaming\PROGRAM\settings to see if it exists if it doesn’t then it will create it. Next the script is copying the contents from the UNC path into the folder.

The way the script is currently written anything in the folder named source will get dumped into the settings folder in Roaming. If you need to copy just a specific file just add the specific file in the copy command and run it. For this solution I just set the script to be a Logon script via a GPO.