2014-02-07 5 views
0

전자 메일을 보내려는 PowerShell 스크립트가 있습니다. 문제는 스크립트를 호출하고 smtp 서버, 전자 메일 주소, 사용자 이름 및 암호를 포함한 일부 매개 변수를 전달할 수 있기를 원합니다. 문제는 powershell 스크립트가 명령 줄에서 암호를 가져 오는 것을 좋아하지 않는다는 것입니다. 암호를 하드 코드해야합니다. 이 주위에 어떤 방법이 있습니까? 한 가지 더 많은 정보는 때로는 작동한다는 것입니다. 문제는 내가이 스크립트에서 데이터베이스를 쳤을 때 암호가 오르는 것입니다. 하지만 데이터베이스에서 암호를 전혀 사용하지 않습니다. 누구든지 이것에 대해 어떤 생각을 밝힐 수 있습니까?명령 줄에서 암호를 사용하는 Powershell 스크립트

$smtpServer = $args[0] 
$EmailTo = $args[1] 
$UserName = $args[2] 
$Password = $args[3] 

$Subject = "Some Subject" 
$EmailFrom = "[email protected]" 
$Body = "Bunch of data here" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("MyUserName", "MyPassword") 
#$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("MyUserName", "MyPassword") --this won't work 
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) 
+0

"좋아하지 않아"라는 말은 무엇을 의미합니까? 스크립트가 충돌합니까? 그렇다면 오류가 무엇입니까? 조용히 실패합니까? 다른 것? –

+0

예, 오류가 있지만 암호를 하드 코드하면이 오류가 표시되지 않습니다. "4"인수가있는 "보내기"예외 : "사서함을 사용할 수 없습니다. 서버 응답 : 5.1.0 인증 필요" . \ SendEmail.ps1 : 50 char : 8 + $ SMTPClient.Send <<< [:), MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException - – BriceTRockindale

+0

어떤 Powershell 버전을 사용하고 있습니까? V2 이상인 경우 Send-MailMessage cmdlet은 해당 기능을 바꿀 수 있어야합니다. 이렇게하면 인수를 전달하기위한 명명 된 매개 변수가 제공되며 이는 인수 목록보다 효과적 일 수 있습니다. – mjolinor

답변

2

당신은 일반 텍스트 명령 줄에서 암호를 전달 할 수 있지만이를 SecureString 개체로 변환 할 필요가 다음이 NetworkCredentials 사용할 수 있습니다.

http://myitforum.com/cs2/blogs/yli628/archive/2007/09/22/how-to-enter-password-as-secure-string.aspx

당신은 또한 "명령 줄 만"일 하 러 - 자격 변경할 수 있지만, 당신은 여전히 ​​이름이 무엇인지 분할해야하고 암호 무엇 :

http://www.powershellmagazine.com/2013/02/11/pstip-get-credential-at-the-command-line/

과거에는 "DOMAIN \"이 "\"로 인해 삭제 될 가능성이있는 "DOMAIN \ username"유형 자격 증명에 문제가있는 것으로 보이는 해결책 중 하나가 기억납니다.

+0

굉장, 고마워! – BriceTRockindale

관련 문제