Cómo convertir una cadena segura a texto sin formato en PowerShell
-
Utilizar la clase
Marshal
para convertir un Secure String a texto plano en PowerShell -
Utilizar el cmdlet
ConvertFrom-SecureString
para convertir un Secure String a texto plano en PowerShell -
Utilizar la clase
NetworkCredential
para convertir un Secure String a texto plano en PowerShell -
Utilizar el método
GetNetworkCredential
para convertir un Secure String a texto plano en PowerShell - Conclusión

PowerShell ofrece varios métodos para manejar objetos SecureString
, que están diseñados para proteger información sensible en memoria. Sin embargo, hay escenarios donde se vuelve necesario convertir SecureString
a texto plano a pesar de los riesgos de seguridad.
En este artículo, exploramos diferentes métodos para lograr esta conversión, incluyendo el uso de la clase Marshal
, el cmdlet ConvertFrom-SecureString
, la clase NetworkCredential
y el método GetNetworkCredential()
. Cada método ofrece sus ventajas y consideraciones, proporcionando flexibilidad en el manejo seguro de datos sensibles dentro de los scripts de PowerShell.
Utilizar la clase Marshal
para convertir un Secure String a texto plano en PowerShell
En PowerShell, la clase [System.Runtime.InteropServices.Marshal]
proporciona métodos para facilitar la interoperabilidad con código no administrado y manipular memoria. Dos de sus métodos, SecureStringToBSTR
y PtrToStringAuto()
, juegan un papel crucial en convertir SecureString
a texto plano.
Ejemplo:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$secureStringPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
$plainText
En este ejemplo, primero creamos un objeto SecureString
llamado $secureString
que contiene la contraseña "MyPassword"
usando el cmdlet ConvertTo-SecureString
. Luego, usamos [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
para convertir el SecureString
a una representación BSTR (Cadena Básica).
Finalmente, se utiliza [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
para convertir la representación BSTR a texto plano y almacenarlo en la variable $plainText
.
Salida:
Utilizar el cmdlet ConvertFrom-SecureString
para convertir un Secure String a texto plano en PowerShell
El cmdlet ConvertFrom-SecureString
convierte la cadena segura a una cadena estándar encriptada. A partir de PowerShell 7.0, se añadió un nuevo parámetro -AsPlainText
, que convierte una cadena segura a una cadena de texto plano.
El siguiente ejemplo requiere PowerShell versión 7.0 o posterior.
Ejemplo:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$plainText = ConvertFrom-SecureString -SecureString $secureString -AsPlainText
$plainText
En este ejemplo, comenzamos creando un objeto SecureString
llamado $secureString
que contiene la contraseña "MyPassword"
usando el cmdlet ConvertTo-SecureString
. Luego, utilizamos el cmdlet ConvertFrom-SecureString
para convertir $secureString
a su representación en texto plano, almacenando el resultado en la variable $plainText
.
Salida:
Utilizar la clase NetworkCredential
para convertir un Secure String a texto plano en PowerShell
En PowerShell, la clase [System.Net.NetworkCredential]
es parte del espacio de nombres System.Net
del Framework .NET
. Se utiliza principalmente para proporcionar credenciales para operaciones en red, como acceder a servicios web, servidores FTP o recursos compartidos en red.
Si bien su principal objetivo es la autenticación, también puede ser utilizada para convertir un SecureString
a texto plano
en escenarios donde se requieren credenciales de texto plano
.
Ejemplo:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$networkCredential = New-Object System.Net.NetworkCredential("", $secureString)
$plainText = $networkCredential.Password
$plainText
En este ejemplo, creamos un objeto SecureString
llamado $secureString
que contiene la contraseña "MyPassword"
usando el cmdlet ConvertTo-SecureString
. Luego, instanciamos un objeto System.Net.NetworkCredential
, $networkCredential
, proporcionando un nombre de usuario vacío (ya que no es necesario para nuestro propósito) y el SecureString
que contiene la contraseña como parámetros.
Finalmente, recuperamos la contraseña en texto plano
de $networkCredential.Password
y la almacenamos en $plainText
.
Salida:
Utilizar el método GetNetworkCredential
para convertir un Secure String a texto plano en PowerShell
En PowerShell, el método GetNetworkCredential()
es parte de la clase PSCredential
, que se utiliza para representar un conjunto de credenciales de usuario. Este método se emplea principalmente para extraer la representación en texto plano
de la contraseña almacenada dentro de un objeto PSCredential
.
Ejemplo:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("username", $secureString)
$plainText = $credential.GetNetworkCredential().Password
$plainText
En este ejemplo, comenzamos creando un objeto SecureString
llamado $secureString
que contiene la contraseña "MyPassword"
usando el cmdlet ConvertTo-SecureString
. A continuación, creamos un objeto PSCredential
llamado $credential
con un nombre de usuario ficticio y el $secureString
como la contraseña.
Finalmente, utilizamos el método $credential.GetNetworkCredential().Password
para extraer la contraseña en texto plano
del objeto PSCredential
.
Salida:
Conclusión
En la programación de PowerShell, convertir SecureString
a texto plano es un requisito común en varios escenarios. Al aprovechar métodos como la clase [System.Runtime.InteropServices.Marshal]
, el cmdlet ConvertFrom-SecureString
, la clase [System.Net.NetworkCredential]
o el método GetNetworkCredential()
, los usuarios pueden manejar de manera segura información sensible mientras también cumplen con los requisitos operativos.
Ya sea interactuando con sistemas externos, API heredadas o operaciones en red, estos métodos proporcionan flexibilidad y conveniencia. Sin embargo, es crucial manejar datos sensibles con precaución y considerar las implicaciones de seguridad involucradas.