Copiar datos de una matriz de caracteres administrada a un puntero de memoria no administrada desde PowerShell utilizando la clase Marshal (funcionamiento inseguro)

Lo primero que hay que indicar es que el funcionamiento es inseguro, incluso el propio PowerShell falla a veces cuando se ejecuta el siguiente script.

$a = 'holass'

# SizeOf: Devuelve el tamaño no administrado, en bytes, de una clase.
$size = [Runtime.InteropServices.Marshal]::SizeOf($a[0])*$a.Length

# AllocHGlobal: Asigna memoria de la memoria no administrada del proceso.
$ptr0 = [Runtime.InteropServices.Marshal]::AllocHGlobal($size)

# Copy: Copia los datos de una matriz administrada a un puntero de memoria no administrada o de un puntero de memoria no administrada a una matriz administrada.
[Runtime.InteropServices.Marshal]::Copy($a,0,$ptr0,$a.Length)

# PtrToStringAuto: Asigna un String administrado y copia en él total o parcialmente una cadena no administrada.
[Runtime.InteropServices.Marshal]::PtrToStringAuto($ptr0)

# FreeHGlobal: Libera memoria previamente asignada de la memoria no administrada del proceso.
[Runtime.InteropServices.Marshal]::FreeHGlobal($ptr0)

Resultado de la ejecución en Windows

Resultado de la ejecución en Mac