$picture_ID = 1 $file = "c:\image.jpeg" $sqlserver = "DBServer" $SQLCommand = "Select image From ImageTable Where ID = '$picture_ID'" #note image is an SQL Type "Image" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server=$sqlserver;Database=master;Integrated Security=True" $SqlConnection.Open() $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $SQLCommand $SqlCmd.Connection = $SqlConnection $dbname = $SqlCmd.ExecuteScalar() $SqlConnection.Close() Set-Content -path $file -Value $dbname -Encoding Byte start $file #open the file to view if its correct.
In my case I didn't know the files were jpeg but used http://www.sqlimageviewer.com/ to first see what type of tiles they are. Then change the file extension. Also the trial was sufficient for this, no need to buy it.
Additionally I modifyed a fuction from Jason Fossen to demo the return array when it was returned as a string to create a byte array and
function Convert-HexStringToByteArray {
Param ( [String] $String )
#Clean out whitespaces and any other non-hex crud.
$String = $String.ToLower() -replace '[^a-f0-9\\\,x\-\:]',''
#Try to put into canonical colon-delimited format.
$String = $String -replace '0x|\\x|\-|,',':'
#Remove beginning and ending colons, and other detritus.
$String = $String -replace '^:+|:+$|x|\\',''
#Maybe there's nothing left over to convert...
if ($String.Length -eq 0) { ,@() ; return }
#Split string with or without colon delimiters.
$String -split '([a-f0-9]{2})' | foreach-object {
if ($_) {
[System.Convert]::ToByte($_,16)
}
}
}
$file = "c:\image.jpeg"
$img = "0xFFD8FFE000104A46......" #excluded the rest for size reasons
$ba = Convert-HexStringToByteArray $img
Set-Content -path $file -Value $ba -Encoding Byte
start $file #open the file to view if its correct.


