Я работаю над скриптом powershell, который ищет определенный файл на удаленном компьютере и передает (сохраняет) их в файл xx.txt, и отправляет электронное письмо с прикрепленным файлом, если сканирование было ОК, если бы оно не было просто отправьте сообщение с сообщением об ошибке. (У меня 70 компьютеров в домене)Обработка 2 списков одновременно
Теперь, что мне нужно сделать, это присоединить имя компьютера с именем пользователя. (Я все еще очень новое с Powershell сценариев)
это скрипт:
$people = Get-Content "D:\Script\people.txt" # list of people. One user per line.
$computers = Get-Content "D:\Script\list.txt" # list of computers is stored in list.txt file. One coputer name per line
$day = (get-date).DayOfWeek # day of week
$time = get-date -Format "HH:mm:ss" # time
$date = get-date -Format "dd.MM.yyyy" # date
foreach ($a in $people){}
foreach ($i in $computers)
{$i + $a + "`n" +
"================================================="
"| " + $time + " - " + $day + " - " + $date+" |" # 14:57:54 - Friday - 17.10.2014
"================================================="
"| Testing connection on computer $i |"
"================================================="
$test_connect = Test-Connection -ComputerName $i -Count 2 -ErrorAction SilentlyContinue # Ping computer with 2 counts and don't dispay errors
if ($test_connect -ne $null) # if ping OK, continue with searching for files
{
"================================================="
"| Testing connection PASSED |"
"| Scan started on $i at $a |"
"================================================="
$RemoteSB = $executioncontext.invokecommand.NewScriptBlock("get-childitem c:\*,d:\* -include *.xls,*.xlsx,*.mobi,*.avi,*.mp3,*.mp4,*.csv,*.aif,*.iff,*.mid,*.ra,*.wav,*.wma,*.mov,*.mpg,*.rm,*.wmv,*.epub -exclude *.xlm -recurse")
invoke-command -computername $i -scriptblock $RemoteSB -ErrorAction SilentlyContinue > X:\$i.txt
$smtpTo = "[email protected]"
"================================================="
"| Search done on $i |"
"| Continuing to next computer |"
"| email report sent to $smtpTo |"
"| !!!! SCAN COMPLETE !!! |"
"================================================="
" "
$file = "X:\$i.txt" # file name list of computers and their destination PATH$
$smtpServer = "smtp.gmail.com" # enter your SMTP server
$smtpFrom = "[email protected]" # send email FROM address
$smtpTo = "[email protected]" # send email TO address
$messageSubject = "Scan Done for computer $i on $date" # SUBJECT line
$messagebody = "Scan for computer $i is done on $day $date at $time, continuing to next one. This computer belongs to $a." #email BODY text
Send-MailMessage -SmtpServer $smtpServer -To $smtpTo -From $smtpFrom -Subject $messageSubject -Body $messagebody -attachment $file # Sendmail command
}
else # if PING fails send email with error
{
"================================================="
"| !!!! ERROR !!! |"
"================================================="
"================================================="
"| Testing connection on $i FAILED |"
"================================================="
" "
$smtpServer = "smtp.gmail.com" # enter your SMTP server
$smtpFrom = "[email protected]" # send email FROM address
$smtpTo = "[email protected]" # send email TO address
$messageSubjectError = "!!!ERROR!!! Scan for computer $i failed" # SUBJECT line
$messagebodyError = "Error Scan for computer $i at $day $date on $time, continuing to next one." # email BODY text
Send-MailMessage -SmtpServer $smtpServer -To $smtpTo -From $smtpFrom -Subject $messageSubjectError -Body $messagebodyError # Sendmail command
}
}
Скрипт работает отлично, если я не ставлю первый Еогеасп ($ а в $ людей) {} Я думаю, что-то отсутствует ($ a в $ people) {XXXXXXXXX} или аналогично, но я до сих пор не понимаю, что.
Если кто-нибудь может помочь, я буду более чем ценен.
рассматривает
Neven Gotovac
UPDATE:
Пробовал с ответом ниже, но это не сработало, или я положил его в неправильной линии. вывод скрипта выглядит так. Если вы проверите, вы увидите, что имя «augustin» повторяется всегда. Вместо этого он должен быть изменен как имя компьютера.
PS C:\Users\Administrator> D:\Script\run3.ps1
c04 - augustin
=================================================
| 17:44:29 - Friday - 17.10.2014 |
=================================================
| Testing connection on computer c04 |
=================================================
=================================================
| !!!! ERROR !!! |
=================================================
=================================================
|Testing connection on c4 for augustin FAILED |
=================================================
C37 - augustin
=================================================
| 17:44:29 - Friday - 17.10.2014 |
=================================================
| Testing connection on computer C37 |
=================================================
=================================================
| !!!! ERROR !!! |
=================================================
=================================================
|Testing connection on C37 for augustin FAILED |
=================================================
C51 - augustin
=================================================
| 17:44:29 - Friday - 17.10.2014 |
=================================================
| Testing connection on computer C51 |
=================================================
=================================================
| !!!! ERROR !!! |
=================================================
=================================================
|Testing connection on C51 for augustin FAILED |
=================================================
Я @ Matt поставили скобки, как вы сказали, но он все еще повторяет имя пользователя :(это проблема, если имя пользователя есть точка в середине firstname.lastname в people.txt файле
Должны ли быть отношения между человеком и компьютером? Как сказал Мэтт, ваш текущий код перечисляет каждого человека для каждого компьютера. –
Да, это должно быть отношения.Пример: c01 - augustin –