Captura de Powershell no estándar Salida CmdLet para control de flujo

Actualmente, intenta crear un script que utilice cmdlets del package MS lanzado por Team Foundation Server Power Tools.

Estoy intentando transferir la lógica de commands desde el éxito o el fracaso del cmdlet " Update-TFSWorkspace "; sin embargo, no puedo get un código de retorno de la llamada ni puedo capturar la salida usando Out-String. Estoy usando Powershell v1.

update-tfsworkspace "C:\doesnotexist\" -recurse -version T 

Genera un post de "No se puede determinar el espacio de trabajo". que es el error que bash atrapar

 $ret = update-tfsworkspace "C:\doesnotexist\" -recurse -version T 

Se espera que me dé un verdadero / falso de $ true / $ indicando pero no funciona.

 update-tfsworkspace "C:\doesnotexist\" -recurse -version T | Out-Null 

Se espera que evite que el cmdlet escriba el post, pero no funciona.

 trap{echo "fail"} update-tfsworkspace $workspace_path -recurse -version T 

Se espera que capture un error y escriba "fail" pero no funciona.

 $msg = update-tfsworkspace $workspace_path -recurse -version T | Out-String 

Se espera que llene una variable de $ msg con la salida del host, pero no funciona.

Estoy totalmente sin ideas aquí. ¡Ayuda sería apreciada!

Pequeño hacky, pero como no tengo TFS para tratar de descubrir algo más, mira si esto ayuda.

Diría que este cmdlet no se escribió correctamente. Primero, dado que no tuvo éxito, ¿debería haber emitido un object de error que habría causado $? para devolver falso que podría haber revisado o atrapado. En segundo lugar, no puede suprimir el post de error con -ea 0. Parece que este snapin está utilizando la API de host para escribir una cadena de error en la console del host. ¡Eso es un arrojo! Por ahora, puedes hacer lo que EBGreen sugiere:

$ msg = powershell.exe -nologo update-tfsworkspace "C: \ doesnotexist \" -current -version T 2> & 1

Solo tenga cuidado con todo el text que su script de perfil escupe cuando se inicia una nueva instancia de PowerShell.

Su problema aquí es que el cmdlet está escribiendo un error (Error sin terminación), pero no arroja una exception (Error de terminación). Puede hacer que arroje una exception agregando el parámetro ErrorAction:

 trap{echo "fail"} update-tfsworkspace $workspace_path -recurse -version T -ErrorAction "Stop" 

Esto hará que el cmdlet ponga fin a todos los errores (lanzando una exception si escribe en la secuencia de error).