Use-RawPipeline.ps1

$script:ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue;
Try
{
    Add-Type -TypeDefinition '
        namespace PSGuy.UseRawPipeline
        {
            public sealed class RawPipelineObject : System.IDisposable
            {
                private void ThrowIfDisposed()
                {
                    if (disposed)
                        throw new System.ObjectDisposedException("This RawPipelineObject has been disposed.");
                }
 
                private string fileName;
                private bool owner;
                private bool disposed = false;
 
                public string GetFileName()
                {
                    ThrowIfDisposed();
                    return fileName;
                }
                public bool IsOwner()
                {
                    return owner;
                }
                public RawPipelineObject(string fileName) { owner = false; this.fileName = fileName; }
                public RawPipelineObject() { owner = true; this.fileName = System.IO.Path.GetTempFileName(); }
 
                static System.Text.Encoding preferredEncoding = null;
                public static System.Text.Encoding PreferredEncoding
                {
                    get { return preferredEncoding; }
                    set { preferredEncoding = value; }
                }
 
                static bool detectEncodingFromBom = true;
                public static bool DetectEncodingFromBom
                {
                    get { return detectEncodingFromBom; }
                    set { detectEncodingFromBom = true; }
                }
 
                public static implicit operator string (RawPipelineObject obj)
                {
                    return object.ReferenceEquals(obj, null)
                        ? string.Empty
                        : obj.GetContent();
                }
 
                public static implicit operator RawPipelineObject (string fileName)
                {
                    return string.IsNullOrWhiteSpace(fileName)
                        ? null
                        : new RawPipelineObject(fileName);
                }
 
                public string GetContent()
                {
                    ThrowIfDisposed();
                    using (var sr = object.ReferenceEquals(preferredEncoding, null)
                        ? new System.IO.StreamReader(fileName, detectEncodingFromBom)
                        : new System.IO.StreamReader(fileName, preferredEncoding, detectEncodingFromBom))
                        return sr.ReadToEnd();
                }
 
                public override string ToString()
                {
                    return GetContent();
                }
 
                public void Dispose()
                {
                    if (disposed)
                        return;
                    disposed = true;
                    if (owner)
                    {
                        try { System.IO.File.Delete(fileName); }
                        catch { }
                    }
                    owner = false;
                    fileName = null;
                }
                ~RawPipelineObject()
                {
                    Dispose();
                }
            }
        }
    '
 -Language 'CSharp';
}
Catch { }