Cómo usar PowerShell Reemplazar para reemplazar una cadena o un carácter

¿Necesita reemplazar una cadena o un carácter en PowerShell? ¿O desea insertar bloques de texto completos en un archivo? Entonces la función de reemplazo en PowerShell es lo que está buscando.

Con el método Reemplazar o -replace operador en PowerShell, podemos buscar y reemplazar cualquier carácter o (parte de) cadenas con otros datos.

En este artículo, vamos a echar un vistazo a los diferentes métodos para reemplazar una cadena en PowerShell, y también le daré algunos ejemplos útiles en lo que respecta a la función de reemplazo.

Powershell Reemplazar carácter en cadena

En PowerShell podemos usar el Replace() en cualquier cadena o variable que sea una cadena. El método necesita dos argumentos, el texto o el carácter que desea encontrar y con lo que desea reemplazarlo.

La mejor manera de explicar la función Reemplazar de PowerShell es con ejemplos, así que comencemos con algunos ejemplos simples, como reemplazar un carácter o una palabra en una cadena.

Tomemos la siguiente cadena:

$str = "Welcome to LazyAdmin"

Para reemplazar la palabra to dentro at podemos usar el siguiente método:

$str = $str.Replace('to','at')
Reemplazo de PowerShell

He almacenado el resultado del método de reemplazo en la misma variable. No necesita usar variables para usar el método de reemplazo en PowerShell, también puede reemplazar directamente la cadena si lo desea.

"Welcome to LazyAdmin".Replace('to','at')

Otro ejemplo que uso a menudo es reemplazar las barras en la ruta de una carpeta:

$Paths = "folder\subfolder"
$Paths.replace('\','\\')

# Result
folder\\subfolder

Eliminación de caracteres o palabras de una cadena

También podemos usar el método de reemplazo para eliminar palabras o caracteres de las cadenas. Para hacer esto, solo necesitamos reemplazar el contenido con una cadena vacía, como esta:

# Replace the word 'to' with nothing
$str.Replace("to","")

Tomemos una lista de direcciones de correo electrónico y eliminemos el nombre de dominio y el símbolo @ de ella, por lo que solo nos quedan los nombres de usuario. Vamos a recorrer la matriz con direcciones de correo y almacenar el resultado en $ nombres de usuario:

$mailAddresses = @("[email protected]","[email protected]","[email protected]")
$usernames = @()

$mailAddresses | ForEach{
    $usernames += $_.Replace("@lazydev.com","")
}

# Result
AdeleV
GradyA
JoniS

Insertar texto en plantillas con Reemplazar

Algunas secuencias de comandos que he creado enviaron un correo electrónico con información, por ejemplo, el nombre de usuario y la contraseña de un nuevo usuario, o una descripción general de todos los usuarios sin MFA habilitado.

Para esos correos electrónicos, he creado una plantilla de correo electrónico HTML y dentro de esta plantilla, he colocado marcadores de posición para el nombre de usuario y la contraseña.

<p>Hi {{manager.firstname}},</p>
<p>The account for {{user.fullname}} is ready. Below you will find the login credentials for {{user.firstname}}. The password is temporary and needs to be changed after the first login.</p>
  <p>
	  <table class="details">
		  <tr>
			  <td style="font-family:sans-serif;font-size:14px;">Username: </td>
			  <td style="color:#000000;"><strong>{{user.UserPrincipalName}}</strong></td>
		  </tr>
		  <tr>
			  <td style="font-family:sans-serif;font-size:14px;">Password: </td>
			  <td><strong>{{user.Password}}</strong></td>
		  </tr>
	  </table>
  </p>
<p>If you have any questions, please let us know</p>
<p>IT</p>

Como puede ver en la plantilla HTML, he creado marcadores de posición con corchetes {{ }}. Con PowerShell podemos cargar el contenido del archivo HTML y usar replace para reemplazar todos los marcadores de posición con el valor correcto:

#Get the mailtemplate
$mailTemplate = (Get-Content ($rootPath + '\' + $config.Settings.mailTemplateManager)) | ForEach-Object {
	$_ 	-replace '{{manager.firstname}}', $manager.GivenName `
	-replace '{{user.UserPrincipalName}}', $user.UserPrincipalname `
	-replace '{{user.Password}}', $config.Settings.password `
	-replace '{{user.fullname}}', $user.fullName `
	-replace '{{user.firstname}}', $user.givenName
} | Out-String	
		
return $mailTemplate

En este caso, he utilizado el –replace operador, pero también puede utilizar el replace() método para reemplazar varias instancias:

$str = "Welcome to LazyAdmin"
$str.Replace('Welcome','Hello').Replace('to ','')

# Result
Hello LazyAdmin

Powershell Reemplazar expresión regular

junto al Replace() método, también tenemos el -replace operador. Básicamente, pueden hacer lo mismo, reemplazar cualquier carácter o palabra en una cadena con otra cosa. Pero hay una gran diferencia entre los dos, el -replace El operador usa expresiones regulares para hacer coincidir la parte de búsqueda.

Nota

El operador -replace solo usa expresiones regulares para encontrar la palabra clave. No usa expresiones regulares en la parte de reemplazo del operador.

Tomemos el siguiente ejemplo, tengo una lista de archivos de registro que quiero cambiar de nombre de .log a .txt, por ejemplo.

reemplazo de cadena powershell

Para hacer esto, podemos usar el operador -replace en PowerShell para seleccionar el .log desde el final de la cadena y reemplazarlo con .txt.

Get-ChildItem c:\temp\files | Rename-Item -NewName { $_.name -replace '\.log

Ahora en este caso también podríamos usar el replace() porque .log es lo suficientemente único como para seleccionarlo y reemplazarlo. Pero si queremos eliminar el año del nombre del archivo, necesitaremos usar expresiones regulares para esto:

# Find 4 digits with \d{4}
Get-ChildItem c:\temp\files | Rename-Item -NewName { $_.name -replace '\d{4}','' }
powershell reemplazar expresiones regulares

Crear expresiones regulares siempre es un poco desafiante si no lo hace todos los días. Un buen sitio para probar tus expresiones es Regex101.com.

Sustitución entre mayúsculas y minúsculas y entre mayúsculas y minúsculas

El operador -Replace es por defecto insensible a mayúsculas y minúsculas. Puede hacer que se distinga entre mayúsculas y minúsculas usando el -creplace operador en lugar de -replace. Por ejemplo:

$str = "Hello LazyAdmin"

# Case insensitive
$str -replace 'hello', 'Goodbye';
# Result : Goodbye LazyAdmin

# Case sensitive
$str -creplace 'hello', 'Goodbye;
# Result : Hello LazyAdmin

Powershell Reemplazar Caracteres Especiales

Con el operador de reemplazo en PowerShell, podemos reemplazar fácilmente todos los caracteres especiales en una cadena.

Regex nos permite seleccionar todos los caracteres que no son palabras, todo excepto az, AZ y 0-9, a otra cosa.

Por ejemplo:

$str = "Long [String] with [email protected]#123$% and (spaces)'"
$str -replace ('\W', '')

# Result
LongStringwith_specialcharacter123andspaces

Si desea eliminar todos los caracteres especiales, excepto los espacios, entonces debemos usar una expresión regular ligeramente diferente:

$str = "Long [String] with [email protected]#123$% and (spaces)'"
$str -replace ('[^a-zA-Z\d\s:]', '')

# Result
Long String with specialcharacter123 and spaces

Terminando

Reemplazar caracteres o palabras en una cadena con PowerShell se realiza fácilmente utilizando el método de reemplazo o -replace operador.

Al trabajar con caracteres especiales, como [ ], \ or $ símbolos, a menudo es más fácil usar el replace() método que la variante del operador. Porque de esta manera no necesitas escapar del carácter especial.

Y recuerde, siempre pruebe su secuencia de comandos antes de ejecutarla con datos o archivos reales.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

,’.txt’ }

Ahora en este caso también podríamos usar el replace() porque .log es lo suficientemente único como para seleccionarlo y reemplazarlo. Pero si queremos eliminar el año del nombre del archivo, necesitaremos usar expresiones regulares para esto:


powershell reemplazar expresiones regulares

Crear expresiones regulares siempre es un poco desafiante si no lo hace todos los días. Un buen sitio para probar tus expresiones es Regex101.com.

Sustitución entre mayúsculas y minúsculas y entre mayúsculas y minúsculas

El operador -Replace es por defecto insensible a mayúsculas y minúsculas. Puede hacer que se distinga entre mayúsculas y minúsculas usando el -creplace operador en lugar de -replace. Por ejemplo:


Powershell Reemplazar Caracteres Especiales

Con el operador de reemplazo en PowerShell, podemos reemplazar fácilmente todos los caracteres especiales en una cadena. Regex nos permite seleccionar todos los caracteres que no son palabras, todo excepto az, AZ y 0-9, a otra cosa.

Por ejemplo:


Si desea eliminar todos los caracteres especiales, excepto los espacios, entonces debemos usar una expresión regular ligeramente diferente:


Terminando

Reemplazar caracteres o palabras en una cadena con PowerShell se realiza fácilmente utilizando el método de reemplazo o -replace operador.

Al trabajar con caracteres especiales, como [ ], \ or $ símbolos, a menudo es más fácil usar el replace() método que la variante del operador. Porque de esta manera no necesitas escapar del carácter especial.

Y recuerde, siempre pruebe su secuencia de comandos antes de ejecutarla con datos o archivos reales.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Otros artículos relacionados

Get-ADComputer- Cómo encontrar y exportar computadoras AD PowerShell

Get-ADComputer- Cómo encontrar y exportar computadoras AD PowerShell

¿Necesita exportar todas las computadoras desde una unidad organizativa o buscar una computadora en su Active Directory? ¿O quieres contar ...
Leer Más
Obtenga el informe de métricas de almacenamiento de OneDrive con PowerShell

Obtenga el informe de métricas de almacenamiento de OneDrive con PowerShell

¿Sabe cuánto almacenamiento de OneDrive utilizan sus usuarios? Probablemente no, y en la mayoría de los casos, tampoco importa. Obtienen ...
Leer Más
Cómo usar Start-Transcript en PowerShell

Cómo usar Start-Transcript en PowerShell

Cuando ejecute scripts de PowerShell automáticamente, necesitará una forma de registrar cualquier error o advertencia que ocurra. Una opción es ...
Leer Más
Cómo usar PowerShell Reemplazar para reemplazar una cadena o un carácter

Cómo usar PowerShell Reemplazar para reemplazar una cadena o un carácter

¿Necesita reemplazar una cadena o un carácter en PowerShell? ¿O desea insertar bloques de texto completos en un archivo? Entonces ...
Leer Más
Cómo usar Import-CSV en PowerShell

Cómo usar Import-CSV en PowerShell

Cuando trabajamos con PowerShell, podemos usar archivos CSV para importar datos a los sistemas o usarlos como una lista de ...
Leer Más
Cómo agregar o configurar MailboxFolderPermission con PowerShell

Cómo agregar o configurar MailboxFolderPermission con PowerShell

En Exchange Online podemos compartir buzones completos con otros usuarios. Pero, ¿qué sucede si desea compartir solo una carpeta? ¿O ...
Leer Más

Deja un comentario