我正在攻读Network \ System Admin认证(MCSE就在其中),除此之外,我们还开始深入研究PowerShell脚本。
无论如何,我的导师给了我一个挑战,如下: 我需要创建一个PS脚本,它将运行Robocopy工具,以便将文件夹从A点镜像到B点,并且该脚本应作为计划任务运行(/ w任务计划程序)。 如果robocopy遇到任何错误,脚本应通过公司的Exchange邮件服务器向负责该流程的管理员发送邮件。
我不是任何形式的脚本,所以在我开始工作之前,我必须坐下来学习语法,命令等。
这是我到目前为止所得到的:
# PowerShell Robocopy Script V.1 | Liron Ben-David
# Variables
$Source ="C:\Source\"
$Destination = "C:\Destination\"
$ExitCode = "Null"
#Copying Process
Robocopy $Source $destination *.* /mir /r:100 /w:10
# Return Code Section
if ($LASTEXITCODE -eq 0) {$ExitCode = "Succeeded, Code: $LASTEXITCODE" }
elseif (($LASTEXITCODE -gt 1) -and ($LASTEXITCODE -lt 17)) {$ExitCode = "Failure, Code: $LASTEXITCODE" }
else {$ExitCode = "No Return Code"}
Write-Host $ExitCode
## Failure Report
if ($ExitCode -gt 1) {Send-MailMessage -to "Admin (Admin@Domain.com)" -From "Machine-Robocopy1 (M1RC@domain.com)" -Subject $ExitCode -SmtpServer mail.domain.com}
else {exit}
基本上如果进程中存在任何类型的错误,脚本应该发送一封带有脚本错误代码的电子邮件作为邮件的“主题”。
首先: 这个脚本是否包含我所做的任何令人尴尬的错误,以及将来我应该避免哪些错误?
其次: 我从来没有使用CLI发送电子邮件,使用Send-Mail CMDLET我应该使用凭证开关,但根据我读过的内容\看起来它似乎会弹出一个输入窗口。 考虑到我为域环境设置此脚本,当我尝试发送消息时,SSO功能不会启动吗?
编辑: 还注意到我混合了错误代码,所以我需要重新校准错误代码行。
编辑2:在您的帮助下保留第2版
# PowerShell Robocopy Script V.2 | Liron Ben-David
# Variables
$Source = "C:\Source\"
$Destination = "C:\Destination\"
$ExitCode = "Null"
$ReturnCodeValue = "Void"
$Log = "C:\RoboLogs\RobocopyLog.txt"
#Copying Process
Robocopy $Source $destination *.* /mir /r:100 /w:10 /UniLog:C:\RoboLogs\RobocopyLog.txt /v
# Return Code Section
if (($LASTEXITCODE -eq 0) -or ($LASTEXITCODE -eq 1) -or ($LASTEXITCODE -eq 3) -or ($LASTEXITCODE -eq 5) -or ($LASTEXITCODE -eq 6) -or ($LASTEXITCODE -eq 7)) {$ExitCode = "Succeeded, Code: $LASTEXITCODE" }
elseif (($LASTEXITCODE -eq 2) -or ($LASTEXITCODE -eq 4)) {$ExitCode = "Error, Code: $LASTEXITCODE" }
elseif ($LASTEXITCODE -gt 7) {$ExitCode = "Failure, Code: $LASTEXITCODE" }
else {$ExitCode = "No Return Code"}
$ReturnCodeValue = $LASTEXITCODE
# Debug Section
#Write-Host "Did the script completed succesfuly:" $?
#Write-Host "Script Exit Code:" $ExitCode
#Start-Sleep -s 4
## Failure Report
if (($ReturnCodeValue -gt 7) -or ($ReturnCodeValue -eq 2) -or ($ReturnCodeValue -eq 4)) {Send-MailMessage -to "Admin (Admin@Domain.com)" -From "Machine-Robocopy1 (M1RC@domain.com)" -Subject $ExitCode -SmtpServer mail.domain.com –Attachments $Log -UseSsl}
else {exit}