2014-05-08 26 views
19

Sto creando uno script PowerShell che assemblerà un percorso HTTP dall'input dell'utente. L'output deve convertire qualsiasi spazio nell'input dell'utente per i codici specifici del prodotto, "% 2F".Come sostituire gli spazi con% 20 in PowerShell?

Ecco un esempio della sorgente e l'output:

L'URL del sito può essere una costante, anche se una variabile sarebbe un approccio migliore per il riutilizzo, come utilizzato nel programma è il seguente:/http:% 2F% 2SPServer/Progetti /"

$Company="Company" 
$Product="Product" 
$Project="The new project" 
$SitePath="$SiteUrl/$Company/$Product/$Project" 

come output ho bisogno di:.

'/http:%2F%2FSPServer%2FProjects%2FCompany%2FProductF2FThe%2Fnew%2Fproject' 

risposta

9

La trasformazione di uscita è necessario (spazi a% 20, le barre al% 2F) è chiamato codifica URL che sostituisce (fughe) ch caratteri che hanno un significato speciale quando fanno parte di un URL con il loro equivalente esadecimale preceduto da un segno%.

È possibile utilizzare le classi di framework .NET da PowerShell.

[System.Web.HttpUtility]::UrlEncode($SitePath) 

codifica una stringa URL. Questi overload di metodi possono essere utilizzati per codificare l'intero URL, inclusi i valori della stringa di query.

http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

+1

questo dà + invece% 20, quindi utilizzare quello sotto – edelwater

+0

@edelwater; + è una codifica valida del carattere spazio in un URL. Sono abbastanza sicuro che l'OP abbia solo bisogno di un URL validamente codificato, non specificamente di% 20 per lo spazio. –

+1

non eseguire mai urlencode, eseguire sempre uri: escapedatastring (ed eseguire sempre urldecode); google/stackoverflow ad es. http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx – edelwater

35

Per sostituire " " con %20 e / con %2F e così via, effettuare le seguenti operazioni:

[uri]::EscapeDataString($SitePath) 
+0

Grazie, questo ha funzionato. Il suggerimento di @Eric J funzionerebbe, ma avrei dovuto trovare prima System.Web. La tua soluzione era più semplice e ha funzionato. Grazie –

+0

Ha funzionato !!!!!! –

+0

Se stai cercando un esempio completo sulla codifica di una stringa di query: https://stackoverflow.com/documentation/powershell/7352/url-encode-decode/24404/encode-query-string-with-uriescapedatastring#t= 201610100318438161132 – VertigoRay

14

La soluzione di @manojlds converte tutti caratteri dispari nella stringa fornita . Se si vuole fare la fuga per gli URL solo, utilizzare

[uri]::EscapeUriString($SitePath) 

Questo lascerà, per esempio, barre (/) o segni uguale (=) così come sono.

Esempio:

# Returns http%3A%2F%2Ftest.com%3Ftest%3Dmy%20value 
[uri]::EscapeDataString("http://test.com?test=my value") 

# Returns http://test.com?test=my%20value 
[uri]::EscapeUriString("http://test.com?test=my value") 
4

Per sistemi operativi più recenti, il comando viene cambiata. Ho avuto problemi con questo in Server 2012 R2 e Windows 10.

[System.Net.WebUtility] è quello che dovresti usare se ricevi errori che [System.Web.HttpUtility] non è lì.

Problemi correlati