Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11448 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newhk
 
из хелпа:

Цитата:
 
    -ComputerName <String[]>
        Specifies the computers to ping. Type the computer names or type IP addresses in IPv4 or IPv6 format. Wildcard characters are not permitted. This parameter is required.
 

 
т.е. здесь канает массив

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 20:34 23-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
Надо бы, что бы для каждого каталога выводились элементы отдельно, группировка.

write-host - вредный командлет. Использовать его либо в тестовых целях (лучше через условный блок), либо если очень нужна расцветка...
А так, по-быстрому, на коленке:
сырой код
 
Добавлено:
newhk

Цитата:
но список из 30 и более компов становиться достаточно громоздким...

в powershell лучше делать не так...
Сначала список компов, а потом уже тестировать:

Код:
function get-failed {
    process{
        if(!(test-connection -comp $_ -count 1 -q)){
            [array]$failed += $_
        }
    }
    end {
        # Здесь команда передачи списка тестов $failed с ошибками коннекта
        write-output $failed # это тестовый вывод, в боевых условиях можно убрать
    }
}
 
$arr = @(
    'aaa'
    'bbb'
    'ccc'
)
 
$arr|get-failed


Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:10 23-07-2019 | Исправлено: YuS_2, 21:44 23-07-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Так не пашет: DirectoryMeasureSum -Path $dirs

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 23:12 23-07-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Переделал немного: DirectoryMeasureSum Вроде как надо работает. Только с названием…

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 02:11 24-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
Так не пашет: DirectoryMeasureSum -Path $dirs  

естественно, при том коде, который был, так передается массив каталогов, а через конвейер, они передаются по одному.
То бишь, при том коде, что был в "самокатике":

Код:
...
Write-Host $Path
...

- выводился сразу тот самый массив, который передается...
 
Т.е. надо, либо по конвейеру, передавать по одному каталогу, либо так, как в новом коде, обрабатывать весь массив каталогов в цикле и только внутри цикла выводить данные последовательно.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:06 24-07-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Для меня это, вот совсем не очевидно оказалось. Я ожидал другого поведения от process и хотел без цикла
Ну опять натолкнул меня на мысль, что не правильно

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 08:40 24-07-2019
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Спасибо!
 
Только
в условии, то-ли ошибка, то-ли не дописка:
if(!(test-connection -comp $_ -count 1 -q))
Ключ: -ComputerName

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 09:21 24-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
натолкнул меня на мысль

Главное, что результат получен, такой какой нужен был
Или, что-то смущает, всё же?

Цитата:
Только с названием…

- это имею в виду.  
Format-Table может выводить не все данные, а выбранные по параметру -Property, т.е. названия (или Path?) можно скрыть.

Код:
Format-Table -AutoSize -GroupBy Path -prop Name,Count,Length

 
newhk

Цитата:
в условии, то-ли ошибка, то-ли не дописка

ни то и не другое, это сокращение, которое допускает powershell.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 10:16 24-07-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Название функции смущает и имена переменных, трудно даётся мне это
Всё сокращаешь, буквы экономишь
ft -a -g path -p name,count,length # но вывод это другая функция/скрипт/консоль…

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 10:42 24-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
Название функции смущает и имена переменных, трудно даётся мне это

Хмм, не понял. А что именно смущает? Креативность названия?
Так это дело вкуса и в общем-то, что главное, понятности наименования... что сейчас, что через год.
Ну, можно, например, назвать get-sizeelements, чтобы потом не вспоминать, почему считает не только размер каталогов, но и файлов по указанному пути... как-то так.
Будет достаточно понятно, что функция сделана для получения размера элементов...
Про переменные не понял, что не так? Переменные, они везде могут иметь произвольные названия, вроде бы.
 

Цитата:
но вывод это другая функция/скрипт/консоль…

именно поэтому, ft используется чаще для визуального вывода в понятном виде и именно на консоль, для человека. А для функций и скриптов, его лучше не использовать. Или я что-то недопонял, в чем именно загвоздка?
 
ЗЫ Да, кстати, в powershell, лучше не использовать в именах квадратные скобки, он очень плохо на них реагирует, когда приходится использовать регвыры или даже просто в указании пути к элементам файловой системы, например.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:19 24-07-2019 | Исправлено: YuS_2, 11:28 24-07-2019
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
 
Обнаружил такую штуку.

Код:
 
$date = Get-Date -Format T
function get-failed {
    process{
        if(!(test-connection -ComputerName $_ -count 1 -q)){
            [array]$failed += $_
            }
    }
    end {
        # Здесь команда передачи списка тестов $failed с ошибками коннекта
        New-Item -Name c:\answer\unreachible.txt -ItemType "file" -force; echo $date $failed >> "C:\Answer\unreachible.txt"
    Send-MailMessage -From user@domain.ru -To 2222@domain.ru -SmtpServer mailsrv.domain.ru -Subject "ATTENTION!!! Houston, we have a problem" -Body "At $date host $failed wasn't available"  
        }
}
 
$arr = @(
        'aaa'
    'bbb'
    'ccc'
)
 
$arr|get-failed  
 

 
Если какой-либо хост недоступен, то приходит предупреждение:
 
At 11:16:14 host BBB wasn't available
 
 
А, если все ОК, то:
 
At 11:16:14 host  wasn't available

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 11:26 24-07-2019 | Исправлено: newhk, 11:26 24-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newhk

Цитата:
Обнаружил такую штуку.

Для того, чтобы сделать скрипт, который будет выполнять то, что хочется, необходимо сначала описать задачу полностью.
Вижу, что ещё требуется дата (время?) и запись ошибок в файл, это тоже надо описать в условиях. Ну и прочие подробности, т.е. например, реакция скрипта на отсутствие ошибок соединений - записывать в файл результат? А почту отправлять? И т.д., и т.п.
И только потом уже составлять скрипт...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:47 24-07-2019
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
 
Спасибо
 
Ну так, предполагалось, что ахтунг нужен, только при ошибке.
 
Обычно так бывает
 
Добавлено:
Запись в файл, это так, как резервный вариант.
Просто, мне кажется, что из моего первого вопроса с неэлегантным примером:

Код:
 
if (!(Test-Connection -ComputerName 111))(Send-MailMessage -From user@domain.ru -To user@domain.ru -SmtpServer server.domain.ru -Subject "ATTENTION!!! Houston, we have a problem" -Body "Server 111 not avaliable $date"}
 

уже понятно, что отправлять в случае недоступности, мне так думалось.

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 13:35 24-07-2019
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в общем, добавил условие
если $failed не пустое, то отправляем сообщение

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 16:18 24-07-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newhk
 
http://psframework.org/
Обратите внимание на модуль MailDaemon внизу
 

Цитата:
 
MailDaemon
Install-Module MailDaemon
 
Sending Emails is a fairly common task. Send a status report, send an alert, send a … whatever, really. Many scenarios, many emails and most platforms, services and - especially - people can handle mail. But what starts with a simple Send-MailMessage can have some rather nasty consequences. Configuring email settings in each script means system changes need to be rolled out to each script. Scripts are transitive, short-lived. A simple, short mail service outage can easily result in a critical mail going unsent!
 
Enter MailDaemon, the module to reliably handle all your email needs.
 
Prominent Features:
 
    Never lose an email to service interruption again
    Centrally manage your mail settings using the Group Policy, SCCM or another management platform of your choice.
    Authenticated SMTP without having to handle credentials in the individual tasks sending emails
 

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 17:36 24-07-2019 | Исправлено: LevT, 17:37 24-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newhk

Цитата:
если $failed не пустое, то отправляем сообщение

Да, это самое простое решение. Только, учитывайте, что список компьютеров в таком виде, будет представлен в одну строку.
 
 
Добавлено:
newhk
вот, примерно такой скрипт, возможно, будет более подходящим:

Код:
param(
    [string]$from = 'user@domain.ru',
    [string[]]$to = ('2222@domain.ru','3333@domain.ru'),
    [string]$login='user',
    [string]$password='password'
)
 
function send-mail ($a) {
    $pass = convertto-securestring $password -asplaintext -force
    $cred = new-object system.management.automation.pscredential ($login, $pass)
    $smtpserver = 'mailsrv.domain.ru'
    #$smtpport = 25
    $subject = "ATTENTION!!! Houston, we have a problems"
    $body = 'The following servers are not available:' + "`n" + $($a|out-string)
    send-mailmessage -fr $from -to $to -smtp $smtpserver -subj $subject -body $body -cred $cred -usessl -enc UTF8
}
 
function get-failed {
    process{
        if(!(test-connection -comp $_ -count 1 -q)){
            $failed = [pscustomobject] @{
                Fail = $_
                Time = get-date
            }
            [array]$faileds += $failed
            write-output $(
                "Error "+$failed.fail+(" в {0:yyyy.MM.dd HH-mm-ss}" -f ($failed.time))
            )
        }
        
    }  
    end {
        if($faileds){send-mail $faileds}
    }
}
 
$log = 'c:\answer\unreachible.txt'
$arr = @(
    'aaa'
    'bbb'
    'ccc'
)
 
$arr|get-failed |out-file $log -enc utf8 -app
 

в параметрах запуска скрипта можно задавать исходящий ящик, адресатов, логин и пароль или можно их задать по умолчанию.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:39 24-07-2019 | Исправлено: YuS_2, 20:46 24-07-2019
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Купленные мной курсы
 
StackSkills
https://yadi.sk/d/WigjrGZ7NL8jTg
Learning Task Automation using Windows PowerShell
https://stackskills.com/courses/enrolled/580114
Advanced Scripting & Tool Making using Windows PowerShell
https://stackskills.com/courses/enrolled/580250
Active Directory (AD) Management using Windows PowerShell
https://stackskills.com/courses/enrolled/580543
 
Specialist
Курс 10961С: Автоматизация административных задач при помощи Windows PowerShell 3.0
https://www.specialist.ru/course/m10961
https://yadi.sk/d/RwqUzLW72cRhIw
Курс 10967A: Основы инфраструктуры Windows Server 2012
https://www.specialist.ru/course/m10967
https://yadi.sk/d/G9l7y9q1gO1PlQ
Курс 20410D: Установка и настройка Windows Server 2012 R2
https://www.specialist.ru/course/m20410
https://yadi.sk/d/ZSwdsugBVgCv0g
Курс 20411D: Администрирование Windows Server 2012 R2
https://www.specialist.ru/course/m20411
https://yadi.sk/d/sV4zlw81TFYn8Q
 

Код:
 
# Скачать видео с помощью youtube-dl
# https://github.com/ytdl-org/youtube-dl/releases
# https://ffmpeg.zeranoe.com/builds
$urls= @(
    "https://",
    "https://"
)
$youtubedl = "D:\youtube-dl.exe"
# --list-formats url
# --format 43+35 url
# --username $username
# --password $password
# --video-password $videopassword
$output = "D:\"
$filename = "%(title)s.mp4"
foreach ($url in $urls)
{
    Start-Process -FilePath $youtubedl -ArgumentList "--output `"$output\$filename`" $url"
}
 

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 12:16 25-07-2019 | Исправлено: farag, 18:31 16-04-2020
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
YuS_2
 
Спасибо!
 
Добавлено:
YuS_2
 
Это

Код:
 
param(
    [string]$from = 'user@domain.ru',
    [string[]]$to = ('2222@domain.ru','3333@domain.ru'),
    [string]$login='user',
    [string]$password='password'
)  
 

опечатка?

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 14:59 25-07-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
newhk

Цитата:
опечатка?

Почему опечатка?

Цитата:
-To <String[]>

- говорит о том, что можно использовать массив строк
А вот, пример из встроенной помощи:

Код:
Send-MailMessage -From "User01 <user01@example.com>" -To "User02 <user02@example.com>", "User03 <user03@example.com>" -Subject "Sending the Attachment"...

так что опечатки нет, всё в пределах допустимого.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:14 25-07-2019
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
Write-Host "`nВведите полный путь до файла или папки," -NoNewline
Write-Host "`nкоторые хотите " -NoNewline
Write-Host "исключить " -ForegroundColor Yellow -NoNewline
Write-Host "из списка сканирования Windows Defender" -NoNewline
$paths = Read-Host -Prompt " "
function test
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$True)]
        [string[]]$paths
    )
    foreach ($path in $paths)
    {
        $path = $path.Replace("`"", "")
        Add-MpPreference -ExclusionPath $path -Force
    }
}
test path, path2, path3, path4
 

 
Можно ли как-то по-нормальному сделать, чтобы в Read-Host можно было вбить множественный параметр через запятую?.. В данном случае, чтобы исключить из сканирования не одну папку.

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 12:16 29-07-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru