ProcessTools.ps1

# Process utils

# May 20th 2019
function Execute-Process
{
<#
    .SYNOPSIS
    Executes a given executable, batch, etc. in a new process and returns its stdout.
 
    .DESCRIPTION
    Executes a given executable, batch, etc. in a new process and returns its stdout.
 
#>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [String]$FileName,
        [Parameter(Mandatory=$True)]
        [String]$Arguments
    )
    Process
    {
        # Create ProcessStartInfo
        $info = New-Object System.Diagnostics.ProcessStartInfo
        $info.FileName = $FileName
        $info.Arguments = $Arguments
        $info.CreateNoWindow = $true
        $info.RedirectStandardOutput = $true
        $info.UseShellExecute = $false

        # Create a new process and execute it
        $ps = New-Object System.Diagnostics.Process
        $ps.StartInfo = $info
        $ps.Start() | Out-Null
        $ps.WaitForExit()

        # Get the output and return it
        $stdout = $ps.StandardOutput.ReadToEnd()

        return $stdout
    }
}

# May 20th 2019
function Inject-DLL
{
<#
    .SYNOPSIS
    Injects a given DLL to the given process
 
    .DESCRIPTION
    Injects a given DLL to the given process.
 
#>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [String]$ProcessID,
        [Parameter(Mandatory=$True)]
        [String]$FileName,
        [Parameter(Mandatory=$False)]
        [String]$Function
    )
    Process
    {
        $InjectDLL = "$PSScriptRoot\InjectDLL.exe"
        $arguments = "$ProcessID `"$Filename`""
        if(![string]::IsNullOrEmpty($function))
        {
            $arguments += " $function"
        }
        Write-Verbose "Invoking: $InjectDLL $arguments"

        Execute-Process -FileName $InjectDLL -Arguments $arguments
    }
}

# May 20th 2019
Function Get-ShortName { 
   
    [cmdletbinding()] 
    Param( 
        [Parameter(Mandatory=$True)] 
        [String]$FileName
    ) 
    Process
    {
        $ScriptingFSO = New-Object -ComObject Scripting.FileSystemObject 
        return $ScriptingFSO.GetFile($($FileName)).ShortPath 
    }
}