Capture la salida de un comando de PowerShell en un archivo por lotes para el bucle / f
Este código de PowerShell selecciona el valor correcto paravar5
de esta cadena. El resultado deseado es "Alerta elevada".
PS C:\src\t> $s = 'Status 58 var5=Alert Raised on: March'
PS C:\src\t> $s
Status 58 var5=Alert Raised on: March
PS C:\src\t> $s | Where-Object { $_ -match '.*var5=(.*)\s+\w+:' } | ForEach-Object { $Matches[1] }
Alert Raised
Sin embargo, el uso del mismo código de PowerShell en un script de shell cmd produce un resultado diferente. ¿Porqué es eso? ¿Hay algo que deba escaparse para el shell cmd?
C:>type mat002-annex.bat
@ECHO OFF
SET "S=Status 58 var5=Alert Raised on: March"
ECHO S is set to %S
FOR /F %%a IN ('powershell -NoLogo -NoProfile -Command ^
" '%S%' | Where-Object { $_ -match '.*var5=(.*)\s+\w+:' } | ForEach-Object { $Matches[1] } "') DO (ECHO Result is "%%a")
C:>mat002-annex.bat
S is set to S
Result is "Alert"