Skip to content

Instantly share code, notes, and snippets.

@brianddk
Created May 13, 2015 11:31
Show Gist options
  • Select an option

  • Save brianddk/d93af4ab8670ab85d106 to your computer and use it in GitHub Desktop.

Select an option

Save brianddk/d93af4ab8670ab85d106 to your computer and use it in GitHub Desktop.
function CompressBuffer
{
Param(
[Parameter(Mandatory=$true)]
[Array]$Buffer
)
$inBuffer = [Byte[]] $Buffer
$staticBuffer = New-Object Byte[]($inBuffer.Length)
$inBuffer.CopyTo($staticBuffer, 0)
$compressedStream = New-Object IO.MemoryStream
$gZipper = New-Object IO.Compression.GZipStream -ArgumentList @(
$compressedStream, [IO.Compression.CompressionMode]::Compress)
$gZipper.Write($staticBuffer, 0, $staticBuffer.Length)
$gZipper.Close()
$compressedBuffer = $compressedStream.ToArray()
$compressedStream.Close()
return $compressedBuffer
}
function DecompressBuffer
{
Param(
[Parameter(Mandatory=$true)]
[Array]$Buffer
)
$uncompressedStream = New-Object IO.MemoryStream
$compressedStream = New-Object IO.MemoryStream -ArgumentList @(,$Buffer)
$gUnzipper = New-Object IO.Compression.GZipStream -ArgumentList @(
$compressedStream, [IO.Compression.CompressionMode]::Decompress)
$gUnzipper.CopyTo($uncompressedStream)
$uncompressedBuffer = $uncompressedStream.ToArray()
$gUnzipper.Close()
$compressedStream.Close()
$uncompressedStream.Close()
return $uncompressedBuffer
}
function myFunc
{
param([Diagnostics.ProcessStartInfo] $psi, [Array] $BytesIn)
$buf = New-Object Char[](1024)
$psi.WorkingDirectory = (Get-Location).Path
$psi.UseShellExecute = $false
if($BytesIn) {$psi.RedirectStandardInput = $true}
$psi.RedirectStandardOutput = $true
#$psi.RedirectStandardError = $true
$process = [System.Diagnostics.Process]::Start($psi)
if($BytesIn) {
$process.StandardInput.Write($BytesIn)
}
do
{
Start-Sleep 1
$done = $process.HasExited
if(-not $e -and $process.StandardError) {
$e = $process.StandardError.ReadToEndAsync() }
if(-not $o -and $process.StandardOutput) {
$o = $process.StandardOutput.ReadToEndAsync() }
}
until($done)
$process.StandardInput.Close()
$process.StandardError.Close()
$process.StandardOutput.Close()
return ($out, $err)
}
$processStartInfo = New-Object System.Diagnostics.ProcessStartInfo
$processStartInfo.FileName = "robocopy.exe"
$processStartInfo.Arguments = @(,"/?")
myFunc $processStartInfo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment