Skip to content

Instantly share code, notes, and snippets.

View mavaddat's full-sized avatar
🏠
Working from home

Mavaddat Javid mavaddat

🏠
Working from home
View GitHub Profile
@mavaddat
mavaddat / progressPrediction.ps1
Last active March 22, 2024 04:24
Demo for effective time prediction in progress in PowerShell
$queries = 0..25
Set-Variable -Name SecondsPerQuery -Value 11 -Option ReadOnly -Force
Set-Variable -Name Variability -Value 0.07 -Option ReadOnly -Force
$queries | ForEach-Object -Begin {
$averageSecondsPerQuery = $SecondsPerQuery # Average seconds per query will be used to predict the time per iteration
} -Process {
$index = $_
$timing = [timespan]::FromSeconds((Get-Random -Minimum ((1.00 - $Variability) * $SecondsPerQuery) -Maximum ((1.00 + $Variability) * $SecondsPerQuery)))
$averageSecondsPerQuery = $averageSecondsPerQuery * ($index / $queries.Length) + $timing.TotalSeconds * ($queries.Length - $index) / $queries.Length
[pscustomobject]@{
@mavaddat
mavaddat / MoveAzStorageBlob.ps1
Last active March 14, 2024 19:46
A small function to move Azure Blobs using the already available cmdlets from Az.Storage
function Move-AzStorageBlob {
#Requires -Modules Az.Storage
[CmdletBinding(ConfirmImpact = 'High', SupportsShouldProcess)]
param (
[Parameter(Mandatory)]
[System.Object]
$SrcBlob,
[Parameter(Mandatory)]
[string]
$SrcContainer,
@mavaddat
mavaddat / sqlclUpdate.ps1
Last active January 26, 2024 02:24
PowerShell script and C# program to download and install latest SQLcl
$sqlclDownload = Invoke-RestMethod -Uri "https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/"
$sqlclDownloadHash = ($sqlclDownload | Select-String -Pattern "SHA256: (?<sha256>[^<]+)" | Select-Object -ExpandProperty Matches).Groups['sha256'].Value
$sqlclDownloadUri = ($sqlclDownload | Select-String -Pattern "https:.*\.zip" | Select-Object -ExpandProperty Matches).Value
Invoke-WebRequest -Uri $sqlclDownloadUri -OutFile $env:TEMP\sqlcl.zip
if(Get-FileHash -Path $env:TEMP\sqlcl.zip | ForEach-Object { $_.Hash -ieq $sqlclDownloadHash }){
Expand-Archive -Path $env:TEMP\sqlcl.zip -DestinationPath $env:LOCALAPPDATA\Programs\ -Force
}
function ConvertTo-TnsnamesOra
{
[CmdletBinding(DefaultParameterSetName = 'PipelineStringArray')]
param
(
[Parameter(ParameterSetName = 'ConnectionsJsonPath')]
[String]$ConnectionsJsonPath = "$env:APPDATA\SQL Developer\system*\o.jdeveloper.db.connection\connections.json",
[Parameter(ParameterSetName = 'PipelineStringArray', ValueFromPipeline, ValueFromPipelineByPropertyName = $true)]
[ValidateScript({ $null -ne $_ -and $null -ne ($_ | ConvertFrom-Json -Depth 99) }, ErrorMessage = 'The input string is not valid JSON.')]
[string[]]$ConnectionsJsonStrArray,
@mavaddat
mavaddat / moveAzStorageBlob.ps1
Last active August 24, 2023 14:56
PowerShell cmdlet to move Azure Storage blobgs
function Move-AzStorageBlob {
#Requires -Modules Az.Storage, Az.Accounts
[CmdletBinding()]
param (
$SrcBlob,
$SrcContainer,
$DestContainer,
$DestBlob,
$Context
)
@mavaddat
mavaddat / decryptSqlDb.ps1
Created August 17, 2023 12:38
decrypt oracle sql developer password using PowerShell
function Get-DecryptedPassword {
[CmdletBinding()]
param (
[Parameter(ValueFromPipelineByPropertyName)]
[securestring]
$EncryptedPassword = (Get-Content -Path 'C:\Users\B0649033\AppData\Roaming\SQL Developer\system*\o.jdeveloper.db.connection\connections.json' | ConvertFrom-Json | ForEach-Object { $_.connections.info } | Out-ConsoleGridView -Title "Choose connection" -OutputMode Single | ConvertTo-SecureString -AsPlainText -Force ),
[Parameter(ValueFromPipelineByPropertyName)]
[string]
$DbSystemId = (([xml]$(Get-Content -Path "$env:APPDATA\SQL Developer\system*\o.sqldeveloper\product-preferences.xml")) | ForEach-Object { $_.preferences.value } | Where-Object -FilterScript { $_.n -eq 'db.system.id' } | Select-Object -ExpandProperty v -Unique -First 1)
)
@mavaddat
mavaddat / htmlImagesToBaseSixtyFour.ps1
Created August 8, 2023 16:24
Convert all images to base64
$md = <# PATH TO MARKDOWN FILE #>
$images = Select-String -Pattern "(?<=!\[[^\(]+\()[^\)]+(?=\))" -Path $md | ForEach-Object { $_.Matches.Value }
$html = <# PATH TO HTML FILE #>
$images = Select-String -Pattern "(?<=src=`")[^`"]+(?=\))" -Path $html | ForEach-Object { $_.Matches.Value }
$imagesBase64 = [string[]]::new($images.Count)
foreach($image in $images){
try {
# $filehandle = [System.IO.File]::Open((Join-Path -Path (Split-Path -Path $md -Parent) -ChildPath $image),[System.IO.FileMode]::Open)
$filehandle = [System.IO.File]::Open($image,[System.IO.FileMode]::Open)
$bytes = [byte[]]::new($filehandle.Length)
@mavaddat
mavaddat / oneDriveTrustedZones.ps1
Last active August 4, 2023 19:55
Set OneDrive and SharePoint trusted zones
#Requires -RunAsAdministrator
$zones = "onedrive.com", "*.onedrive.com", "onedrive.live.com", "login.live.com", "g.live.com", "spoprod-a.akamaihd.net", "*.mesh.com", "p.sfx.ms", "oneclient.sfx.ms", "*.microsoft.com", "fabric.io", "*.crashlytics.com", "vortex.data.microsoft.com", "posarprodcssservice.accesscontrol.windows.net", "redemptionservices.accesscontrol.windows.net", "token.cp.microsoft.com/", "tokensit.cp.microsoft-tst.com/", "*.office.com", "*.officeapps.live.com", "*.aria.microsoft.com", "*.mobileengagement.windows.net", "*.branch.io", "*.adjust.com", "*.servicebus.windows.net", "vas.samsungapps.com", "odc.officeapps.live.com", "login.windows.net", "login.microsoftonline.com", "*.files.1drv.com", "*.onedrive.live.com", "*.*.onedrive.live.com", "storage.live.com", "*.storage.live.com", "*.*.storage.live.com", "*.groups.office.live.com", "*.groups.photos.live.com", "*.groups.skydrive.live.com", "favorites.live.com", "oauth.live.com", "photos.live.com", "skydrive.live.com", "api.live.net", "apis.live.
@mavaddat
mavaddat / reverseVars.ps1
Last active July 10, 2023 07:16
Reverse resolve %PATH% paths using available environment variables
# Create a list of the environment variables sorted by length
$envs = Get-ChildItem -Path Env:\ | ForEach-Object {
[pscustomobject]@{
Length = $_.Value.Length
Name = $_.Name
Value = $_.Value
}
} | Sort-Object -Descending -Property Length
# Replace the environment variables in the user path with the variable name
$userPath = [System.Environment]::GetEnvironmentVariable('PATH',[System.EnvironmentVariableTarget]::User) -split [System.IO.Path]::PathSeparator
@mavaddat
mavaddat / setupCerts.ps1
Last active April 9, 2024 14:53
Set up CA Cert bundles for all toolsets (Python, AWS, Git, NodeJs) in Windows using PowerShell Core. Answer on Stackoverflow question: https://stackoverflow.com/questions/51925384/unable-to-get-local-issuer-certificate-when-using-requests/76397035#76397035
function Set-CaCertsBundles
{
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')]
param(
[Parameter(HelpMessage = 'Environment variable target')]
[ValidateScript({ $_ -ne [System.EnvironmentVariableTarget]::Machine -or [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent().IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) }, ErrorMessage = 'Cannot set machine environment variables without admin privileges')]
[ArgumentCompleter({ [System.Enum]::GetNames([System.EnvironmentVariableTarget]) })]
[System.EnvironmentVariableTarget]
$Target = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) ? [System.EnvironmentVariableTarget]::Machine : [System.EnvironmentVariableTarget]::User,
[Parameter(HelpMessage = 'Output file path')]