Al revisar los registros de PowerShell, intento extraer los comandos mientras descarto la ruta desde la que se ejecutó el comando. Por ejemplo,
PS C:\Windows\system32> pwd
Solo me gustaría devolver pwd . Sé que esto se puede lograr con .split , pero estoy luchando para que la expresión regular funcione. La ruta variará, por lo que la creación de una expresión regular a partir de una ruta específica no funcionará. Mi intento en este momento es hacer coincidir la cadena entre "PS" y ">", como la expresión regular aquí (?<=(PS)).*(?=(> )) . Sin embargo, esto provoca resultados no deseados cuando la ruta contiene las letras 'ps'.
Tampoco se desea dividir > , ya que si un comando tiene > en él, entonces no quiero recortar el comando real.
Simplemente tome la línea, divídala y tome la última; no se requieren expresiones regulares si lo desea de esa manera
(("PS C:\Windows\system32> pwd") -split "> ",2)[-1]No es la mejor expresión regular, pero hará el trabajo:
("PS C:\Windows\system32> pwd") -replace "^.*?> ",""Editar: expresión regular modificada como se menciona en el comentario: escape innecesario para ">"
¿Desea utilizar RegEx para extraer el comando?
Prueba esto:
$Line = 'PS C:\Windows\system32> pwd' if($Line -match '(?i)ps [az]:(?:\\[a-z0-9]+)+>(?<Cmd>.*)') { $Matches.Cmd } Devuelve pwd . Coloque un espacio entre >( para eliminar el espacio inicial.