Come convertire una stringa sicura in testo normale in PowerShell
-
Usa la classe
Marshal
per convertire una Secure String in testo semplice in PowerShell -
Usa il cmdlet
ConvertFrom-SecureString
per convertire una Secure String in testo semplice in PowerShell -
Usa la classe
NetworkCredential
per convertire una Secure String in testo semplice in PowerShell -
Usa il metodo
GetNetworkCredential
per convertire una Secure String in testo semplice in PowerShell - Conclusione

PowerShell offre vari metodi per gestire gli oggetti SecureString
, progettati per proteggere informazioni sensibili in memoria. Tuttavia, ci sono scenari in cui diventa necessario convertire SecureString
in testo semplice nonostante i rischi per la sicurezza.
In questo articolo, esploreremo diversi metodi per ottenere questa conversione, inclusi l’uso della classe Marshal
, del cmdlet ConvertFrom-SecureString
, della classe NetworkCredential
e del metodo GetNetworkCredential()
. Ogni metodo offre i propri vantaggi e considerazioni, fornendo flessibilità nella gestione sicura dei dati sensibili all’interno degli script di PowerShell.
Usa la classe Marshal
per convertire una Secure String in testo semplice in PowerShell
In PowerShell, la classe [System.Runtime.InteropServices.Marshal]
fornisce metodi per facilitare l’interoperabilità con il codice non gestito e manipolare la memoria. Due dei suoi metodi, SecureStringToBSTR
e PtrToStringAuto()
, svolgono un ruolo cruciale nella conversione di SecureString
in testo semplice.
Esempio:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$secureStringPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
$plainText = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
$plainText
In questo esempio, prima creiamo un oggetto SecureString
chiamato $secureString
contenente la password "MyPassword"
utilizzando il cmdlet ConvertTo-SecureString
. Quindi, utilizziamo [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
per convertire il SecureString
in una rappresentazione BSTR (Basic String).
Infine, [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($secureStringPtr)
viene utilizzato per convertire la rappresentazione BSTR in testo semplice e memorizzarla nella variabile $plainText
.
Output:
Usa il cmdlet ConvertFrom-SecureString
per convertire una Secure String in testo semplice in PowerShell
Il cmdlet ConvertFrom-SecureString
converte la stringa sicura in una stringa standard crittografata. A partire da PowerShell 7.0, è stato aggiunto un nuovo parametro -AsPlainText
, che converte una stringa sicura in una stringa di testo semplice.
Il seguente esempio richiede la versione 7.0 o successiva di PowerShell.
Esempio:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$plainText = ConvertFrom-SecureString -SecureString $secureString -AsPlainText
$plainText
In questo esempio, iniziamo creando un oggetto SecureString
chiamato $secureString
contenente la password "MyPassword"
utilizzando il cmdlet ConvertTo-SecureString
. Utilizziamo quindi il cmdlet ConvertFrom-SecureString
per convertire $secureString
nella sua rappresentazione in testo semplice, memorizzando il risultato nella variabile $plainText
.
Output:
Usa la classe NetworkCredential
per convertire una Secure String in testo semplice in PowerShell
In PowerShell, la classe [System.Net.NetworkCredential]
fa parte dello spazio dei nomi System.Net
del Framework .NET
. Viene utilizzata principalmente per fornire credenziali per operazioni di rete, come l’accesso a servizi web, server FTP o condivisioni di rete.
Sebbene il suo scopo principale sia l’autenticazione, può essere utilizzata anche per convertire un SecureString
in plaintext
in scenari in cui sono richieste credenziali in formato plaintext
.
Esempio:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$networkCredential = New-Object System.Net.NetworkCredential("", $secureString)
$plainText = $networkCredential.Password
$plainText
In questo esempio, creiamo un oggetto SecureString
chiamato $secureString
contenente la password "MyPassword"
utilizzando il cmdlet ConvertTo-SecureString
. Quindi, creiamo un oggetto System.Net.NetworkCredential
, $networkCredential
, fornendo un nome utente vuoto (poiché non è necessario per il nostro scopo) e il SecureString
contenente la password come parametri.
Infine, recuperiamo la password plaintext
da $networkCredential.Password
e la memorizziamo in $plainText
.
Output:
Usa il metodo GetNetworkCredential
per convertire una Secure String in testo semplice in PowerShell
In PowerShell, il metodo GetNetworkCredential()
fa parte della classe PSCredential
, utilizzata per rappresentare un insieme di credenziali utente. Questo metodo viene utilizzato principalmente per estrarre la rappresentazione in plaintext
della password memorizzata all’interno di un oggetto PSCredential
.
Esempio:
$secureString = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("username", $secureString)
$plainText = $credential.GetNetworkCredential().Password
$plainText
In questo esempio, iniziamo creando un oggetto SecureString
chiamato $secureString
contenente la password "MyPassword"
utilizzando il cmdlet ConvertTo-SecureString
. Poi, creiamo un oggetto PSCredential
chiamato $credential
con un nome utente fittizio e il $secureString
come password.
Infine, utilizziamo il metodo $credential.GetNetworkCredential().Password
per estrarre la password plaintext
dall’oggetto PSCredential
.
Output:
Conclusione
Nella programmazione PowerShell, convertire SecureString
in testo semplice è una necessità comune in vari scenari. Sfruttando metodi come la classe [System.Runtime.InteropServices.Marshal]
, il cmdlet ConvertFrom-SecureString
, la classe [System.Net.NetworkCredential]
o il metodo GetNetworkCredential()
, gli utenti possono gestire in modo sicuro informazioni sensibili mentre soddisfano anche requisiti operativi.
Che si tratti di interagire con sistemi esterni, API legacy o operazioni di rete, questi metodi offrono flessibilità e convenienza. Tuttavia, è fondamentale gestire i dati sensibili con cura e considerare le implicazioni di sicurezza coinvolte.