es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El comando Send-MailMessage queda bloqueado en segundo plano si se le suministra el argumento de credenciales.

Estoy intentando ejecutar Send-MailMessage en segundo plano utilizando las credenciales que he obtenido previamente a través de Get-Credential y almacenadas en la variable $creds.

El siguiente comando se bloqueará casi de inmediato en segundo plano:

Start-Job -ScriptBlock { Send-MailMessage -to "test@test.com" -from "test@test.com" -Subject "2342332" -Credential $creds }

Ejecutar Get-Job o asignar el comando anterior a una variable y mostrarlo me dará este estado:


Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
25 Job25 BackgroundJob Blocked True localhost Send-MailMessage -to ...

Ejecutar el mismo comando exacto directamente (sin usar Start-Job) se completará de inmediato (en este caso fallará porque no he proporcionado un servidor smtp). Además, ejecutar el mismo comando exacto sin el argumento -Credential completará el trabajo directamente, así como en segundo plano (fallará por la misma razón de falta de servidor smtp, pero eso no es importante).

¿Hay alguna manera de proporcionar credenciales a este comando, preferentemente con Get-Credential, y poder ejecutarlo con Start-Job?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de suministrar credenciales al comando Send-MailMessage y ejecutarlo en segundo plano con Start-Job. En lugar de pasar la variable $creds a Send-MailMessage, puedes crear un nuevo objeto PSCredential dentro del bloque de script y pasarlo al comando. Aquí tienes un ejemplo:

    $creds = Get-Credential
    
    Start-Job -ScriptBlock {
        $cred = New-Object System.Management.Automation.PSCredential("<nombre de="" usuario="">", (ConvertTo-Securestring "<contraseña>" -AsPlainText -Force))
        Send-MailMessage -to "test@test.com" -from "test@test.com" -Subject "2342332" -Credential $cred -SmtpServer "<servidor smtp="">"
    }
    

    Reemplaza <nombre de="" usuario="">, <contraseña> y <servidor smtp=""> con tus valores reales. Dentro del bloque de script, creamos un nuevo objeto PSCredential pasando el nombre de usuario y la contraseña como texto plano (desde la variable $creds) a ConvertTo-SecureString. Luego pasamos este objeto de credencial a Send-MailMessage.

    Esto debería permitirte ejecutar el comando en segundo plano con Start-Job y suministrar las credenciales necesarias.</contraseña></contraseña>

Comments are closed.