Kamil
https://habrahabr.ru/post/309172/
Kamil
но она не взлетит у меня, надо пилить
Aleksei
Для скриптов установки агента будем использовать, по хардкору, только родную командную строку Windows, без питонов, перлов и т.п.,
Aleksei
пош дак не хардкор =)
Kamil
😄 хз я пош юзаю
Aleksei
я давно давно давно заббиксом мониторил состоятние UPSов
Aleksei
но там просто запускалась консольная утилитка с сорцфоржа
Aleksei
вроде писала в файлик, а файлик я парсил и параметры утшивал в заббикс
Aleksei
все делалось на чистом незамутненном cmd
Sergey
я это так запускаю $txt = D:\downloads\smartmontools-6.5-1.win32-setup\bin64\smartctl.exe -A /dev/sda -d ata | Out-String
Готово шеф function Get-ParamFromCmd { [CmdletBinding()] [OutputType([PSObject])] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, ValueFromPipeline=$true, Position=0)] [string]$Line, [ValidateNotNullOrEmpty()] [string]$Match = "(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)" ) Begin { if($Debug) { $debugPreference = "Continue" } if($Verbose) { $VerbosePreference = "Continue" } Write-Verbose "Шаблон: $($Match)" $Obj = @() } Process { Write-Verbose "Строка: $($Line)" if($Line -match $Match) { Write-Verbose "Совпадение найдено" $Obj += New-Object -TypeName PSObject -Property @{ ID = $Matches[1] ATTRIBUTE_NAME = $Matches[2] FLAG = $Matches[3] VALUE = $Matches[4] WORST = $Matches[5] THRESH = $Matches[6] TYPE = $Matches[7] UPDATED = $Matches[8] WHEN_FAILED = $Matches[9] RAW_VALUE = $Matches[10] function Get-ParamFromCmd { [CmdletBinding()] [OutputType([PSObject])] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, ValueFromPipeline=$true, Position=0)] [string]$Line, [ValidateNotNullOrEmpty()] [string]$Match = "(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)" ) Begin { if($Debug) { $debugPreference = "Continue" } if($Verbose) { $VerbosePreference = "Continue" } Write-Verbose "Шаблон: $($Match)" } Process { Write-Verbose "Строка: $($Line)" if($Line -match $Match) { Write-Verbose "Совпадение найдено" New-Object -TypeName PSObject -Property @{ ID = $Matches[1] ATTRIBUTE_NAME = $Matches[2] FLAG = $Matches[3] VALUE = $Matches[4] WORST = $Matches[5] THRESH = $Matches[6] TYPE = $Matches[7] UPDATED = $Matches[8] WHEN_FAILED = $Matches[9] RAW_VALUE = $Matches[10] } } } end { } } $Lines = d:\Data\Downloads\smartmontools-6.5-1.win32-setup\bin64\smartctl.exe -A /dev/sda -d ata | Out-String -Stream $Lines | ? {$_} | Get-ParamFromCmd
Aleksei
Сергей добрячок
Sergey
чутка упростил
Sergey
Сергей добрячок
весь день бы этим занимался :))
Kamil
Готово шеф function Get-ParamFromCmd { [CmdletBinding()] [OutputType([PSObject])] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, ValueFromPipeline=$true, Position=0)] [string]$Line, [ValidateNotNullOrEmpty()] [string]$Match = "(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)" ) Begin { if($Debug) { $debugPreference = "Continue" } if($Verbose) { $VerbosePreference = "Continue" } Write-Verbose "Шаблон: $($Match)" $Obj = @() } Process { Write-Verbose "Строка: $($Line)" if($Line -match $Match) { Write-Verbose "Совпадение найдено" $Obj += New-Object -TypeName PSObject -Property @{ ID = $Matches[1] ATTRIBUTE_NAME = $Matches[2] FLAG = $Matches[3] VALUE = $Matches[4] WORST = $Matches[5] THRESH = $Matches[6] TYPE = $Matches[7] UPDATED = $Matches[8] WHEN_FAILED = $Matches[9] RAW_VALUE = $Matches[10] function Get-ParamFromCmd { [CmdletBinding()] [OutputType([PSObject])] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, ValueFromPipeline=$true, Position=0)] [string]$Line, [ValidateNotNullOrEmpty()] [string]$Match = "(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)" ) Begin { if($Debug) { $debugPreference = "Continue" } if($Verbose) { $VerbosePreference = "Continue" } Write-Verbose "Шаблон: $($Match)" } Process { Write-Verbose "Строка: $($Line)" if($Line -match $Match) { Write-Verbose "Совпадение найдено" New-Object -TypeName PSObject -Property @{ ID = $Matches[1] ATTRIBUTE_NAME = $Matches[2] FLAG = $Matches[3] VALUE = $Matches[4] WORST = $Matches[5] THRESH = $Matches[6] TYPE = $Matches[7] UPDATED = $Matches[8] WHEN_FAILED = $Matches[9] RAW_VALUE = $Matches[10] } } } end { } } $Lines = d:\Data\Downloads\smartmontools-6.5-1.win32-setup\bin64\smartctl.exe -A /dev/sda -d ata | Out-String -Stream $Lines | ? {$_} | Get-ParamFromCmd
а че было не так?
Sergey
ну тебе сразу массив строк дается + пустые строки
Kamil
Сергей добрячок
я половину его конструкций не понимаю
Kamil
вот это вот $Lines | ? {$_} | Get-ParamFromCmd воообще заклинание какое то
Sergey
? - алиас для Where-Object
Kamil
почему $Obj += работает. хотя до этого вроде также самая конструкция была...
Kamil
? - алиас для Where-Object
да понятно, но в я ее не понимаю
Sergey
полностью Where-Object {$_ -ne $null}
Sergey
и потом я уже исправил пост :) нет там $Obj
Kamil
не понял вопроса
ругалось при попытке так сделать, типа нет свойства аддитивности
Sergey
ээммм ну надо еще раз код смотреть
Kamil
на ду пофигю работает и ладно, осталось понять как и допилить еще
Kamil
спс
Sergey
велкам
Sergey
пошик вообще гадкий язык :) иногда такое доставляет например $_ -ne $null не всегда тоже что $null -ne $_
Kamil
гг
Kamil
как так
Sergey
у мня уже привычка выработалась использовать второй вариант
Sergey
такси приехало, поехал домой
Anton
Пришёл к успеху))
Andrey
ps - зашибись - лучшее, что ms придумал
Sergey
да, хорошая идея в основе
Sergey
исполнение местами страдает
Anonymous
Коллеги, есть грамотный мануал как рапланировать установку обновлений. Вроде всё просчитал, а компы не ребутаются сами. Сижу жду уж dedline прошёл.
Aleksei
https://retropie.org.uk/docs/ кажется это бомба
Aleksei
давно видел но руки как-то не дошли
Aleksei
а щаз два компа есть на миниитх
Sergey
понеслись апдейты
Sergey
Все же знают что будет важный секурити под офис, уязвимость 0-day которого уже активно используется?
Sergey
рекомендую не откладывать тестирование и раскатку
Sergey
всех
Sergey
http://www.securitylab.ru/news/485824.php
Aleksei
да
Aleksei
еще вчера
Sergey
гуд, моя совесть чиста :)
Aleksei
я вот тока всегда задумывался насколько это правда что активно эксплуатируется киберпреступниками =)
Sergey
Kamil
😂
Oleg
хорошая вещь. многим пригодится
Kamil
почему такая конструкция $Lines = d:\Downloads\smartmontools-6.5-1.win32-setup\bin64\smartctl.exe -A /dev/sda -d ata | Out-String -Stream работает правильно, а такая $smartctl = "d:\Downloads\smartmontools-6.5-1.win32-setup\bin64\smartctl.exe" $arg = '-A /dev/sda -d ata' $Lines = & $smartctl $arg | Out-String -Stream не отрабатывается, аргумент не воспринимется корректно?
Sergey
"$smartctl $arg"
Kamil
"$smartctl $arg"
фиг & : Имя "d:\Downloads\smartmontools-6.5-1.win32-setup\bin64\smartctl.exe -A /dev/sda -d ata" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте пр авильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
Sergey
расстрелять бы вас всех
Sergey
Invoke-Expression "$smartctl $arg"
Sergey
а еще лучше так:
Sergey
$res = Invoke-Expression "$smartctl $arg 2>&1"
Kamil
Invoke-Expression "$smartctl $arg"
как так Командлет Invoke-Expression работает примерно так-же, как и оператор & — берет текстовую строку и выполняет ее в виде команды.
Sergey
читай дальше блоги кумаров российских
Sergey
"примерно также"
Sergey
Kamil
а что дает это Sends errors (2) and success output (1) to the success output stream.?
Sergey
+100 к карме
Sergey
ты что, читать не умеешь? тебе же по русски написано что делает ЭТО
Kamil
что делает я понял, зачем это?
Sergey
попробуй - узнаешь
Sergey
без и с
Kamil
ошибку бы сгенерить еще
Kamil
вроде вывод тотже самый
Sergey
омг
Sergey
$lastexitcode придумали трусы
Kamil
и с ошибкой тоже самое
Kamil
аа ошибка приложения
Sergey
давай обмен?
Sergey
у меня есть проблема:
Sergey
в scom перестал почему то работать сборщик данных (rule)