"- Если вы возьметесь лечить больного и он умрет, вы будете казнены!
- А если он выздоровеет?
- В таком случае вы также будете казнены!
- Не велика разница?
- В случае смерти больного карается невежество, в случае выздоровления - дерзость. В обоих случаях вас ждет виселица."
суббота, 31 декабря 2022 г.
пятница, 30 декабря 2022 г.
Nginx условие в конфигурационном файле
Делал мониторинг nginx zabbix`ом и тут возникла проблема, сайт перенаправляет всех на https, а проверку не надо перенаправлять, как же сделать так, чтобы перенаправление работало не всегда?
server{
listen 80;
server_name site.pro www.site.pro *.site.pro;
# Enable php-fpm status page (for ZABBIX PHP-FPm HTTP)
location ~ ^/(status|ping)$ {
access_log off;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
# Enable php-fpm status page (for ZABBIX PHP-FPm HTTP) END
# ADD conditional block
if ($request_uri !~* "^/(status|ping)$") {
return 301 https://$host$request_uri;
}
}
~* - равно регулярке без учета регистр
!~* - не равно регулярке без учета регистр
= - равно правой части
!= - не равно правой части
Во всех условиях, кроме регулярок, использовать знак доллара ($) нельзя, он будет интерпретирован как переменная. Ну или экранируем
четверг, 29 декабря 2022 г.
Порой снится всякая дичь, иногда занимательно и интересно, особенно если предположить что сон - это наша жизнь в другой вселенной (теория мульти вселенных). Сегодня что именно снилось не помню, но в какой-то момент вспыхнул кадр из сна - женская рука покровительственно лежит на плече сидящего человека... может не покровительственно, а ...смирение (?)... нет... нет слов... как-будто говоря - "смотри, я ..." ... и опять нет слов, чтобы описать. Лиц я не вижу, но как-будто знаю кто это (АМ). Но главное в этой руке - на безымянном пальце обручальное кольцо, классическое, без выкрутасов, над ним вытатуирована точка, а под ним символ бесконечности. В остаточных ощущениях от вспышки картинки чувствуется ответ на вопрос - что значит эта комбинация, но в этой вселенной я так и не понял значения. Также стоит отметить, что это была левая рука, что не характерно для рожденных в России.
вторник, 27 декабря 2022 г.
Windows Port forwarding силами ОС
Появилась задача - перебросить пакеты с порта на VPN интерфейсе сервера на другой VPN интерфейс, при этом на сервере работает RRAS. Силами RRAS не получилось, так интерфейс "внутренний" не имеет такой возможности, а вот netsh portproxy справился на ура:
netsh interface portproxy add v4tov4 listenaddress=10.10.10.2 listenport=6604 connectaddress=192.168.80.1 connectport=6604
А вот так можно удалить проброс:
netsh interface portproxy delete v4tov4 listenaddress=10.10.10.2 listenport=6604
А вот так можно проверить список пробросов:
netsh interface portproxy show all
Контроль:
netstat -ano | findstr :6604
Обязательно должна быть включена служба IP Helper:
sc query iphlpsvc
Отметил, что после перезагрузки правило остается, но не работает (порт не слушается). Может быть это связано с тем, что интерфейс, а соответственно и маршрут, появляются позже. В следующий раз проверю, может достаточно перезагрузить службу, тогда накинем отложенный шедуллер, а может вообще if up для службы OpenVPN бахнем
Так, перезапуск службы iphlpsvc восстанавливает прослушивание, надо подумать, что с ней делать.
ПыСы, оказывается в виндовом брандмауере можно включить логирование, но перенаправленные пакеты туда не попадают.
А теперь самое веселое, эта плюшка не нужна, если SMART карта поддерживается определенными криптопровайдерами, тогда можно использовать SMART карту сразу на RDP сервере
Версия 5.0.12600 - не сертифицирована, поэтому я использовал вариант с донастройкой и у меня реально заработало О_О
воскресенье, 25 декабря 2022 г.
Mikrotik script подготовка конфигурационного файла OVPN
У pfSense есть забавная штука - экспорт конфигурации OpenVPN, такой штуки нет на Mikrotik. Я бы мог использовать pfSense или openSense, но они мне не нравятся, а в некоторых случаях сложны для настройки. Так как в одном из проектов мне волей-неволей придется создавать новых пользователей openVPN, я решил максимально автоматизировать процесс экспорта конфигурации и описал скрипт. Скрипт:
- запрашивает необходимые данные
- создает пользователя
- создает и подписывает сертификат
- создает структуру папок
- создает все необходимые файлы в этой структуре
- экспортирует сертификат
- формирует и выгружает файл конфигурации
Запись из июля 2023 года, скрипт формирует структуру каталогов из-за ограничения переменной в 4096 байта, но я случайно нашел обходной вариант, который позволяет слить файлы в один большой - самый последний пример.
суббота, 24 декабря 2022 г.
Mikrotik script Ввод от пользователя
Порой есть задача - запросить данные от пользователя, оказывается в Mikrotik такое тоже возможно. Описал простенькую функцию с параметрами:
- QstUser - Текст вопроса
- VarName - Имя переменной куда будет помещено введенное значение
- DefaultValue - Значение по-умолчанию (на случай пустого ввода)
- LenValue - Минимальная длина ввода (например pass-phrase для экспорта сертификата не может быть меньше 8 символов)
# Example:
# :global UserName ""
# $PromtInput QstUser="\r\nInsert new username" VarName="UserName" DefaultValue=UserX LenValue=4
:local PromtInput do={
:local readinput do={:return}
if ($LenValue>0) do={
:set $QstUser ("$QstUser. Minimum length $LenValue simbols")
}
if ([:len $DefaultValue]>0) do={
:set $QstUser ("$QstUser. \r\n(default - $DefaultValue)")
}
:put ("$QstUser:")
:local UserPromt [$readinput]
if ([:len $UserPromt]>0) do={
[:parse "global $VarName;:set $VarName $UserPromt"]
if (($LenValue>0) and [:len $UserPromt]<$LenValue) do={
:error message="You entered only $[:len $UserPromt] symbols instead of $LenValue minimum required. Stop program"
}
} else={
if ([:len $DefaultValue]>0) do={
[:parse "global $VarName;:set $VarName $DefaultValue"]
} else={
:error message="You didn't enter anything. Stop program"
}
}
}
Если добавить рекурсию с вопросом, то можно избежать выхода из программы при вводе неудовлетворяющему требованиям. Но мне не надо, поэтому я пас
пятница, 23 декабря 2022 г.
Человек стремится идти по модели упрощения во всем, в работе, в отдыхе, в домашних делах и в искусстве. Вот и Гюго здесь и в "Отверженные" уделяет много времени отсылкам и описаниям. Меня самого иногда заносит, но сколько строк ушло на описание подвешенного на цепи мертвеца. А начало меня сначала отправило не пойми куда и я засомневался в художественности произведения, но здесь еще большую роль сыграл тот факт, что 36 часов сна ни в одном глазу, а умиротворение и безделье только усугубили притяжение в царство Морфея
четверг, 22 декабря 2022 г.
понедельник, 19 декабря 2022 г.
Mikrotik script обход параметров функции
Предположим ситуация - необходимо обработать N слов, каждое слово является позиционным параметром некоей функции, сколько слов может быть на входе мы не знаем, но предполагаем что не больше 10. Каким образом обработать параметры? Сначала я подумал о преобразовании текста в код в цикле и обработки его при помощи :parse или :execut как предлагает доблестный rextended:
:global variablename "test"
# Create a global variable using the name inside "variablename" and set the value (or update the value if is already defined)
[:parse ":global $variablename \"REX1\""]
# after "parse" the variable exist and can be displayed
:put $test
# Set a value of variable with name defined inside "variablename" (or simply apply previous "parse" command)
[:parse "global $variablename;:set $variablename \"REX2\""]
:put $test
# For read the value, of a variable with name defined inside "variablename", and put it inside another global or local declared variable:
:global testx [[:parse ":global $variablename; :return \$$variablename"]]
:put $testx
# For read the value, of a variable with name defined inside "variablename", simply for put the value on terminal:
:put [[:parse ":global $variablename; :return \$$variablename"]]
Но, в случае с позиционными параметрами, вариант не прокатил, чет думал-думал (внутренний диалог):
"Вот бы знать сколько их там, в bash то мы знаем"
"Да какая разница сколько их там, все равно цикл с формированием имени переменной не использовать"
"Тогда забей и юзай условной блок с :return"
"Нет, это решение громоздкое и не красивое!....Эврика!, рекурсия со сдвигом параметров!"
Mikrotik script Создать каталог
Решил я описать скрипт по логике которого, нужно было раскидывать файлы по папкам, и тут выясняется что нельзя взять и создать каталог О_О.
В интернетах предлагают такой вариант
/tool fetch dst-path=MyPath/xxx url="http://127.0.0.1/"
Или такой
/tool fetch dst-path=MyPath/xxx url="http://google.com/"
Но у меня не работает такое, в такой вариант прокатил
/tool fetch dst-path=MyPath/xxx url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Чтобы файл не скачивался, вместо xxx ставим точку
/tool fetch dst-path=MyPath/. url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Поддиректории через слеш
/tool fetch dst-path=MyPath/subFolder/. url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Но такой вариант мне не нравится из-за ненадежности источника скачивания, и я нашел вариант через SMB
/ip smb shares add name=test directory=MyPath
/ip smb shares remove [/ip smb shares find where name=test]
Т.о. для создания структуры, можно описать таким образом
пятница, 16 декабря 2022 г.
Bash Console Script Фигурные скобки
"А так можно было?" - подумал я увидя такую конструкцию:
user@server:~$ mv /etc/postfix/{canonical,sender_relay,sasl_passwd} /etc/postfix/private/
Или так (переимновать без ввода полного пути)
user@server:~$ mv /etc/postfix/main.cnf{,.back}
Или так (создать копию без повторного ввода всего пути)
user@server:~$ cp /etc/postfix/main.cnf{,.back}
user@server:~$ ls /etc/postfix/main*
/etc/postfix/main.cf /etc/postfix/main.cf.back /etc/postfix/main.cf.db /etc/postfix/main.cf.proto /etc/postfix/main.cf.proto.db /etc/postfix/main.cf.save
С того момента я каждый раз тратил много времени на попытку вспомнить конструкцию и вот решил устаканить в своей голове фигурные скобки в консоли линукс-подобных систем. При повседневных операциях бывает необходимо повторить одно действие несколько раз и как же бесит когда не можешь упростить. Перейдем к примерам - скопировать из каталогов несколько разных файлов можно разными способами:
user@server:~$ ls ~/test
folder_1 folder_2 file_1 file_2 file_1_bak file_2_bak
user@server:~$ cp ~/test/file_1 ~/test/file_1_bak /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
user@server:~$ rm /new_folder/*
user@server:~$ cp ~/test/file_1* /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
user@server:~$ rm /new_folder/*
user@server:~$ cp ~/test/file_{1,1_bak} /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
user@server:~$ rm /new_folder/*
user@server:~$ cp ~/test/file_1{,_bak} /new_folder
user@server:~$ ls /new_folder
file_1 file_1_bak
суббота, 10 декабря 2022 г.
Есть пословица - "Встречают по одежке, провожают по уму". Отбросим первую часть и посмотрим на вторую не с точки зрения встречи объекта с кем-то, а с точки зрения представления объекту кем то чего либо. Я имею ввиду то, кто первым преподнес то или иное объекту. Предполагаю что произведений описывающих скоротечность времени тьма-тьмущая*, но именно Мюссо представил эту мысль в этом свете, может быть не первым, но наиболее красочно. Я думал тяжелее будет знакомится с "Ты будешь там", но именно "Здесь и сейчас" в конце меня удивила и перевернула сознание, учитывая что ничего сверхъестественного произведение не предлагает*
Можно сказать что автор реабилитирован...
Кажется у автора привязанность не только к медицине, но и к очкам в роговой оправе...
_______________________
*тьма-тьмущая - что-то около без счета....
*тут идет сравнение с другими авторами, представляющими другую реальность (Хайнлайн, Вебер, Маккефри, Хаксли, Оруэлл, Замятин, Стругацкие и другие)
Mikrotik script ssh not execute
Дорабатывая старый проект я столкнулся с проблемой в топике. Нужно было отправить wol не только с нашего роутера, но и с роутера в другом широковещательном сегменте сети. Скрипт успешно отрабатывал после мытарств, но напрочь отказывался работать при запуске из блока on up профиля ppp. В итоге виновник был найден - разрешения, из-за этого мне пришлось напичкать скрипт выводами в лог (обновленный вариант выложил в старый пост) и описать функцию логирования. Что странно, на моменте тестирования скрипт выполнялся со всеми включенными разрешениями и под пользователем с полными правами, на обоих аппаратах, все равно пришлось установить галку "don't require permissions" в настройках скрипта!
Mikrotik script простенькая функция логирования
Задача банальна - писать в лог тогда. когда мне это удобно + писать в вывод (на случай ручного запуска скрипта). Первый вариант был в другом скрипте, в новой старой задаче мне понадобилась эта штука, но пришлось доработать.
# Func loging. For debug. Error write forever, other only of WriteLog =>0 (0 1 2 - level logging), setup up of global var
# $TYPE - topics (error,info)
# $LEVEL - level logging
# 0 only error
# 1 main
# 2 all
# $MESSAGE - text message
# Example
# $Logging MESSAGE=("My text") TYPE="info" LEVEL=2
# for use in func use global context and declared WriteLog
# Exmaple
# :global WriteLog
# $Logging MESSAGE=("My text $codeExit") TYPE="info" LEVEL=2
:global WriteLog
:global Logging do={
:global WriteLog
:local TextMessage ("PlugUser => ".$MESSAGE)
:if ($LEVEL<=$WriteLog) do={
:if ($TYPE="info") do={ :log info message=($TextMessage) }
:if ($TYPE="error") do={ :log error message=($TextMessage) }
}
:put $TextMessage
}
Тут фокус в возможности указания уровня логирования. Не забываем в конце удалять глобальную переменную и правила использования функция и переменных в функциях тут
Mikrotik script ssh command log variable
Вот такая странная тема. Мне нужно было передать 2 команды в ssh-exec со значениями из переменных. Собственно с первой командой проблем не было, а вторая либо не выполнялась, либо писала пустоту в лог (команда логирования). Собственно весь фокус в экранировании при использовании синтаксиса :log info message=("")
/system ssh-exec user=adm address=10.21.0.1 command=("tool wol mac=$macAddr interface=bridge1_LAN; :log info message=(\"$RemoteMessage\")")
Как видим, у нас 2 переменных - $macAddr и $RemoteMessage в двух командах, и оно прекрасно выполняется
/system ssh-exec user=vint address=10.21.0.1 command=("tool wol mac=$macAddr interface=bridge1_LAN; :log info message=(\"Send magic packet on mac:$macAddr, for user $patern\")")
Такой вариант тоже прокатывает, но сложнее читать без правильной подсветки
/system ssh-exec user=vint address=10.21.0.1 command=("tool wol mac=$macAddr interface=bridge1_LAN; :log info message=(Send magic packet on mac:$macAddr, for user $patern)")
А вот без кавычек не сработает, вернет пустоту
пятница, 9 декабря 2022 г.
четверг, 8 декабря 2022 г.
" - Зайди к нам, мне нужна голова Нептуна - говорит О.
Я в непонятках - что зачем ... Прихожу, при этом со мной идут мой старый сотрудник и новый, а заходим мы не в то привычное помещение (квартира), а в двухэтажный дом. Надо заметить что О - руководитель и владелец фирмы по бух сопровождению.
- Какая голова Нептуна?
- Мы тут с девочками днем бухгалтерию, а ночами делаем гипсовые головы. Мне нужна голова Нептуна, будем снимать слепок с твоей головы
- Но я не похож на Нептуна
- Ничего, нам подойдет"
Самое забавное в этом сне то, что проснувшись я увидел сообщение от О, а она давно не писала...
вторник, 6 декабря 2022 г.
понедельник, 5 декабря 2022 г.
Keepass клик по URL - открытие Winbox
В Keepass можно настроить открытие той или иной программы по клику на URL, и передать в программу параметрами некоторые данные. Мне захотелось настроить это дело для WinBox. сам Winbox имеет порядковые параметры:
winbox64.exe ADDRESS USERNAME PASSWORD
Как видим, ничего сложного в открытии программы с предопределенными параметрами, теперь добавим это дело в настройки KeePass:
cmd://"%PROGRAMFILES%\Winbox\winbox64.exe" {BASE:RMVSCM} {USERNAME} {PASSWORD}
Предполагается что сам Winbox (x64) находится по пути "\Program Files\Winbox\" и назывется winbox64.exe
Все, теперь в поле URL пишем winbox:\\address и оно будет работать
воскресенье, 4 декабря 2022 г.
суббота, 3 декабря 2022 г.
Любая жизнь является ценной и значимой, и не важно кто это младенец, старик или собака. Да можно утрировать и напомнить про очень маленьких существ, которых давим не обращая на них внимания, поэтому здесь ремарка - в меру своих сил и возможностей. Герой - врач и бросает собаку, которой навредил, а его подруга ветеринар??? Да как они вообще вместе уже 10 лет?
пятница, 2 декабря 2022 г.
четверг, 1 декабря 2022 г.
Powershell script Список каталогов с полными доступом конкретному пользователю
Нужно было получить список каталогов, к которым имеет полный доступ определенный пользователь, а также группа в которой он находится. Стандартными средствами PowerShell решается одной строкой
Get-Acl -filter * -path * | where {(($_.access.IdentityReference -like "TSVR01\фрукты (все)") -or ($_.access.IdentityReference -like "TSVR01\sklad2")) -and ($_.access.FileSystemRights -like "FullControl") -and ($_.access.AccessControlType -like "Allow")} | ft -Property Path
Рекурсии нет, проверки всех групп также нет
Bash script аналог удаления файлов видеорегистратора
Удаление N старых файлов если объем занятого пространства на диске больше n
#!/bin/bash
# проверка наличия другого запущенного экземпляра
nameScript=$(basename "$0")
if [ "$(pgrep -c "$nameScript")" -gt 1 ]
then
echo "Script is run"
exit
fi
# переменные, можно переделать в параметры
# каталог из которого удаляем файлы
directory=/home/tmk/testrm
# диск у которого проверяем объем
disk=/dev/sda
# глубина поиска файлов в каталоге (избавляемся от рекурсии)
depth=1
# количество файлов к удалению за один проход
amount=10
# лимит занятого простратнства (триггер)
MaxLimit="70"
# вариант IF EXIST, если перети не удалось, значит каталог или не существует или доступа туда нет, и выходим
cd "$directory" || exit
# Пока занятоно места больше $MaxLimit, удаляем старые данные в папке.
while [ "$(df -m | grep $disk | awk '{print $5}' | sed 's/%//g'))" -lt "$MaxLimit" ]
do
# Если в каталоге, при необъходимой глубине, нет файлов, то на выход
if [ "$(find "$directory" -type f -maxdepth $depth | head -n $amount)" != "" ]
then
# Ищем в той самой папке файлы, выводим с датой, сортируем по дате и удаляем первые в списке (самые старые) по $amount штук
# т.к. перевод строки = \n, то использовать -0 для xargs не имеет смысла
find "$directory" -maxdepth $depth -type f -printf "%T@ %p\n" | sort -n | cut -d" " -f2- | sed 's/ /\\ /g' | head -n $amount | xargs rm
else
echo "Free space is low, but directory is empty"
break
fi
done
Bash script проверить наличие другого экземпляра и выйти
Самопроверка скрипта на наличие в процессах
#!/bin/bash
nameScript=$(basename "$0")
if [ "$(pgrep -c "$nameScript")" -gt 1 ]
then
echo "Script is run"
exit
fi
Или (случайно нашел в интернетах 12/04/2024)
#!/bin/bash
instances=`lsof -t "$0" | wc -l`
if (( $instances > 1 )); then exit 1; fi
Вариант для mikrotik
среда, 30 ноября 2022 г.
Сказать что машинка здесь и была, а потом прикинуться раненным оленем???
Не знаю почему, если бы я оказался в такой ситуации, то сразу бы задался вопросом зачем весь этот фарс???
Автор, слабенько
Напомнило мне два момента из жизни, когда сначала взрослый человек, а потом и ребенок попытались манипулировать мной методами, которые я использовал в детстве. Это выглядит так смешно...
вторник, 29 ноября 2022 г.
Mikrotik Типа Jump server
Для доступа к конечному оборудованию (сервер ssh/rdp/https, сетевое оборудование и т.д. )использую как VPN так и белые списки (iptables and etc). Т.к. гарантировать работу сразу нескольких туннелей представляется сложным, я вынужден, в некоторых случаях (выход с неразрешенного ip), подключаться к конечной точке через промежуточную, подключенную через VPN. Порой хоуп получается тройной или даже четверной вложенности. По сути это получается что-то типа ssh-jump-server. Это очень неудобно для вариантов RDP или же банального веб интерфейса.
Последние два месяца я нахожусь за пределами физического расположения разрешенных IP адресов, и т.к. основной IP у меня белый динамический, я вынужден прописывать по новой каждый раз. Это противоречит цели белых списков, т.к. мы не знаем кому потом будет принадлежать этот ip, так еще и вечные трудозатраты на настройку.
Мне тут предложили использовать SSO и keykloak, но мне показалось что это не то что надо, плюс очень громоздко.
воскресенье, 27 ноября 2022 г.
Zabbix как мы заббикс переодевали
Неожиданно захотелось воспользоваться новым функционалом Zabbix, но как выяснилось обновить 4.4 до 6.2 не так просто. Для начала надо обновить операционную систему (у нас Ubuntu 16.04LTS), потом обновить сервер Zabbix. Попытка сделать это наскоком 16.04 = > 22.04 и 4.4 = > 6.2 провалилась и мы потеряли на этом около 7 часов. На самом деле это была вторая попытка, первая провалилась на этапе обновления операционной системы...
Но сразу спойлер - не пытайтесь обновлять по описанному ниже способу, потому что обновление провалилось. Я оставляю эту запись по двум причинам:
- кладезь ошибок и решений
- потрачено очень много времени на данную операцию, суммарно вышло более 4х суток, плюс фиксация здесь
Находясь посреди города, не самого чистого, скованные наручниками женщина полицейский и джазовый музыкант не смогли снять наручники?, нет, я не говорю что у нее должен быть ключ с собой, но сам механизм наручников не так сложен и вскрывается куском проволоки или чего-то похожего
И второй момент - болгаркой разрезать цепь наручников????, да с этой цепью справятся бокорезы!, уж не говоря о болторезе.
Дальше придирка к переводу, суффикс "ш"/"их" (докторша, врачиха, кассирша и пр) в современном значении женщина указанной профессии, но оно прямо смердит уничижительной формой, принижая представителя профессии до третьесортного разряда! Если исходить из того, что запись была подтверждена по почте, то отношения между врачом и пациентом не холодные, а значит применение "врачиха" неприемлемо.
суббота, 26 ноября 2022 г.
"Как Анна попала на склад?", это же в глаза бросается. Ее туда привез Марк, внимание вопрос - почему Марк, как бывший следователь, не пошел выяснять кто, как и зачем нашел Анну?
Собственно, как по мне, не очень удачная сказка...
Быть может это наказание за то, что я не сторонник прочтения краткого описания книги...
пятница, 25 ноября 2022 г.
Сегодня махнул до Каракалпакстана с визарана целью (504 км туда и 504 км обратно). Я даже встал в 5.20, и выехал в 6.09
Выехал я с кабелем USB-C to USB-C для телефона, телефон заряжен на половину, и тут я понимаю, что воткнуть зарядку некуда! А телефон жрет как не в себя. Пришлось отключить все лишнее, потом аудиокнигу, потом и вовсе все отключить. На первой и второй заправке я забыл купить кабель. Целый час ехал в тишине без навигатора. И вот спустя 400 км я купил таки кабель, но до границы 90 км и телефон успел зарядится только до 20%. Останавливался (кроме заправок) один раз - 25 минут спал и снова в путь.
Пограничников забавило мое имя, из 6 человек четверо или пятеро переспрашивали и смаковали его. Без втыкания в телефон было сложновато. В общем прошел без проблем, правда дистанция это не про Казахстан или Узбекистан!
На территории Каракалпакстана решил перекусить, ибо уже 10 часов без еды. Зашел в ближайшее кафе и за 2600 тенге мне дали тушеную говядину с половинкой лука репчатого, чаем и хлебом. мясо пересолено, но обожрался еще на 10 часов.
Обратно проехал без остановок на сон, чет не клонило. Зато водители бесили страшно. Я еду 70 (по спидометру, факт около 65), потому что ограничение 70, какой-то чудак на букву м прижимается, моргает фарами и под знак "обгон запрещен" обгоняет! Тут заканчивается ограничение скорости и запрет обгона, а он все равно тащится 75! Я смотрю воткнуть запрещенную оптику (в РФ такие запрещены), прижаться, слепить и моргать (читай - добивать) вместо обгона с поворотником и дистанцией, тут в порядке вещей. Я еще на выезде из города отметил одного чудака, который прижался и требовал его пропустить, чтобы через 300 метров повернуть направо.
Прибыл в 22.55
У автора явно проблемы с нитью
Почему Марк и Рафаэль не задались вопросом - как Анна попала на этот склад? Если бы человек имел ключи, он бы не выламывал дверь напролом.
Если бы проблема была только в этом архитекторе, то какой смысл скрываться? Может все таки архитектор был чей то марионеткой, которому заказывали убирать неугодных отпрысков?
Почему все это всплыло спустя столько времени?
Почему Анна пыталась скрыться, она что то знала!
От произведения "Острие Бритвы" Моэма я получил реально удовольствие, появилось много новых интересных мыслей. От Театра же, я ничего нового не получил. К мысли о театральности я пришел как-то возвращаясь с работы в первом меде больше десяти лет. А в общем, хотел было сказать о Джулии, а точнее о большинстве женщин и их странных поступках, но автор переложил мои мысли в одну фразу:
- Ну и ведьма ты!
Некоторые могут обидится, но автор книги показал и реакцию Джулии на эти слова, и они скорее были ей лестны, чем оскорбительны
вторник, 22 ноября 2022 г.
понедельник, 21 ноября 2022 г.
воскресенье, 20 ноября 2022 г.
суббота, 19 ноября 2022 г.
Highlightjs добавляем перевод строки
pre {
white-space:pre-wrap !important
}
Но у нее свои косяки, изначально просто некрасиво, а со стандартным "крутым" стилем вообще не видно, т.к. цвета что мой фон. Для себя сделал такой стиль:
MSerror Litemanager белое окно
Описание проблемы:
- При подключении к серверу, превью - белый квадрат
- Клик по превью не разворачивает подключение
- Проявляется на ПК при отключении от внешнего монитора, куда ранее выводилось данное подключение
- Переустановка не помогает (ни сервер, ни клиент) или помогает, но не надолго
MSerror RDP не пробрасывается буфер обмена
Описание проблемы:
- Буфер обмена между RDP сервером и клиентом не синхронизируется
- Буфер обмена работает по отдельности на сервере и клиенте
- В настройках подключения разрешена передача горячих клавиш (на случай использования)
- В настройках подключения включена передача буфера обмена
- Сеанс RDP активен давно
- Проблема решается выходом (не отключением сеанса) и повторным входом
- Процесс rdpclip.exe пользователя потребляет много больше (>20Мб), в сравнении с другими пользователями удаленного рабочего стола (~5 Мб)
taskkill /F /FI "USERNAME eq %username%" /IM rdpclip.exe && ping -n 5 127.0.0.1 >null && rdpclip.exe
четверг, 17 ноября 2022 г.
MSError Синхронизация времени в домене
Так, собственно моя история борьбы с этой штукой
Проблема возникла давно (года три назад), время расходилось на некоторых ПК аж на час, при этом kerberos ничуть не смущался и спокойно пускал куда надо. Когда начал лечение, делал по различным инструкциям при помощи GPO, программ NetTime, пытался указать насильно сервер обновления времени (роутер) и т.д. Понятно что некоторые варианты прокатывали, но под одной из статей я увидел гневный коммент пользователя, который сетовал на горе-админов, у которых руки из жопы и они настраивают время при помощи GPO. Распространение времени должно работать из коробки силами контроллера домена, единственная задача админа - настроить DC с ролью FSMO - PDC на получение времени снаружи.
MSError Не удалось запросить журнал событий DFS Replication на сервере
Банальная ошибка, решается также банально - проверь настройки брандмауэра:
Eng: Remote Event Log Management (RPC) и Remote Event Log Management (RPC-EPMAP)
Rus: Удаленное управление журналом событий (RPC) и Удаленное управление журналом событий (RPC-EPMAP)
В принципе оно не обязательно, т.к. запрашивает только лог, но я иногда смотрю журнал событий другого ПК через оснастку "Управление компьютером", поэтому в групповой политике FireWall добавил данные правила (предопределенные "Удаленное управление журналом")
MSError Некоторые подразделения (OU) в этом домене не защищены от случайного удаления.
Алерт ясен как божий день, но не ясно как определить проблемные OU и установить им автоматически параметр в Истину. Собственно для ручного варианта включаем дополнительные параметры и смотрим в свойствах OU
Для автоматического варианта (выполняется на контроллере домена через PowerShell)
среда, 16 ноября 2022 г.
"Друг-мошенник в первую очередь мошенник, а потом уже друг"
Можно описать и так, оно короче и уже нацелено, но я бы сказал немного по другому - человек в первую очередь человек, и чтобы он ни делал, он делает это в первую очередь для себя и не важно насколько он бескорыстен в тот или иной момент, ибо бескорыстие, также как и бездействие - действие, тоже корысть
вторник, 15 ноября 2022 г.
MSError Пробрасываются только принтеры Microsoft
Решения здесь нету, сказ лишь о том, что верить пользователям нельзя, и проверять все нужно лично.
Говорит работало - принтер в RDP сеансе, да вроде я и сам видел...
Уточним:
- клиент - Windows 7 x64
- сервер Windows server 2019
- принтер HP M125rnw (USB)
политика сначала EasyPrint, потом дрова- не пробрасывается на сервер
- принтер работает локально
- принтер пробрасывается на сервер
- задание передается с сервера на клиент и уходит на принтер (задание не зависает в очереди)
- принтер не печатает удаленно
- принтер не работает локально
- задание улетает на принтер
- принтер пробрасывается
- принтер не работает удаленно
- задание передается с сервера на клиента и уходит на принтер
MSError Ошибка 80244019 на клиентах WSUS
Сдох WSUS на базе WinSrv 2008R2, решили передать роль новому WinSrv2019.
Установил, изменил запись DNS, чтобы имя сервера обновлений передаваемое через GPO не менять. Клиенты в консоли появляться не стали, пробовал выполнять сброс wuauclt /resetauthorization и wuauclt /detectnow, ноль внимания, при этом на всех ПК при попытке запустить поиск выскакивает ошибка 80244019. Начал копать:
- проверил что реестре сервер указан правильно (HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate)
- проверил что имя резолвится, указывал не полное имя без домена
- Поменял имя в записях DNS и в настройках GPO (с wsus на wsus2)
- Проверил настройку WSUS что тачки падают в группы сразу (консоль WSUS - параметры -компьютеры- использовать на компьютерах групповую политику или параметры реестра)
- Проверил в GPO куда складываются компьютеры (Разрешить клиенту присоединение к целевой группе)
- открыл лог на стороне клиента и увидел забавную строчку:
WARNING: DownloadFileInternal failed for http://wsus2/selfupdate/wuident.cab: error 0x80190194
Далее примитивный скрипт обновления политик и перезапуска регистрации на сервере WSUS, не без изъянов, но в моем случае его достаточно, чтобы по быстрому увидеть изменения в консоли WSUS
Aladdin monitor
Надоело каждый раз искать
Aladdin monitor HASP (Аладдин Монитор, Аладин монитор)
Напоминаю: Монитор не покажет ключи, если хоть одна лицензия не выдана!!!!
понедельник, 14 ноября 2022 г.
Чип проверили, добавили витаминок приживания для, сказали за справкой сегодня не ходи, завтра ходи, а лучше послезавтра. Также медсестра поделилась воспоминаниями о погоде в Атырау когда она ходила в школу, год то был 72 второй 20го столетия:
- Плюнешь и долетает сосулька
Где то я уже слышал о таком методе определения температуры, что то около -40.... Сейчас же, если верить тырнетам температура зимой не опускается ниже -5 градусов...
Хотя это нивелируется ветрами, порой кажется что ты не в городе, а на лодке в бурю...
К середине дня палатку разобрали и увезли.
воскресенье, 13 ноября 2022 г.
Excel нельзя использовать относительные ссылки для цветовых шкал
Сразу спойлер - данное решение не является полным аналогом цветовых шкал, т.к. не может подсвечивать промежуточными значениями цвета.
По сути дела сама фича (цветовая шкала Excel) работает по принципу - значение ячейки (не важно сколько их в диапазоне, работает над каждой) в пределах диапазона соответствует рассчитываемому значению самим форматированием, а значение для диапазона считается как МАКС(Выделенного диапазона):
В связи с такой логикой, получить выделение строки по сумме этой строки с относительными ссылками невозможно.
А задачу надо решать, а как?
Проспал 15 часов...
Вчера поставили палатку и вот эти штуки, сначала было подумал что это связанное с ремонтом, но посудины тонко намекают на еду. В чате предположили что это подготовка в похоронам...
суббота, 12 ноября 2022 г.
1СОшибка -2147221164(0x80040154): Класс не зарегистрирован
Частая ошибка, решаемая банальной регистрацией comcntr.dll, но оказывается есть частные случаи, именно с таким я и столкнулся. Имеется сервер 2019, разработчик под учеткой с правами обычного пользователя получил такую ошибку. Что было предпринято:
- первое решение
- регистрация библиотеки требуемой версии платформы
- второе решение
- удалена регистрация библиотек других платформ (regsvr32.exe -u)
- зарегистрирована еще раз нужная
- третье решение
- удалены все платформы
- установлена требуемая по новой
- зарегистрирована библиотека
- перезагружен сервер
пятница, 11 ноября 2022 г.
"Что же хранится по ту сторону Es muss sein .... он делал вещи, на которые ему было плевать и это было прекрасно, он внезапно понял счастье людей, до сих пор он всегда жалел, занимающихся профессиями которые не принуждают их ни к какой внутренней Es muss sein и о которых, покинув свое рабочее место, могут тотчас забыть. Никогда прежде он не знал этого благостного безразличия..."
Работая разнорабочим я вполне ощутил это благостное безразличие, перейдя на новую профессию и расширяя зависимости я прихожу к тому, что это все очень тяготит и хочется вернутся туда...
четверг, 10 ноября 2022 г.
Zabbix боремся с автопереводом единиц измерения
Сделал я себе триггер на изменение скорости порта и вот что он прислал мне:
- Привести мегабиты в биты
- Добавить единицу измерения в черный список (include/func.inc.php)
Zabbix Шаблон D-Link SNMP discovery
После этого квеста задался вопросом, а могу ли я при помощи заббикса отслеживать состояние порта на коммутаторах D-LINK? Оказывается могу, и опять при помощи SNMP. Нашел на узле элементы с OID 1.3.6.1.2.1.2.2.1.8 (ifOperStatus), создал триггер (1-UP,2-DOWN)
......
сижу
....
жду
....
ничего не происходит
.....
Понимаю что где-то косяк, поясняю у гугла, а он говорит что это значение говорит о потери сигнала, как будто кабель выдернули, а ты хочешь фиксировать именно отключение.
среда, 9 ноября 2022 г.
"Я все понимаю, я знаю чего ты хочешь, я все устроил. Просто взойдешь на вершину Петршин...
....
- Это точно Ваше желание?
- Да, это мое желание - сказала Тереза
- Не каждый готов умереть, поэтому мы должны быть уверены что это Ваше желание
- Да, это мое желание - произнесла Тереза
....
- Нет, это не мое желание - произнесла Тереза
- Тогда мы не можем этого сделать"
......
понедельник, 7 ноября 2022 г.
Mikrotik script как скрипт управления D-Link`ом по SNMP писали
Есть у меня сервер, с воткнутым в него свистком, который принимал смс. По крону смски проверялись и выполнялись определенные операции при поступлении управляющих кодов. Последнее время модем начал глючить, да и баланс уже год не показывает и сервер состарился, а тут еще и wAP LTE освободился. Я точно знаю что можно с него (аппарат на базе R11e-LTE) читать и отправлять SMS, и даже USSD запросы.
Mikrotik Script Error: cannot substract nothing from string
Сижу туплю, что за ошибка, ведь в консоли этот фокус прокатил. Добавил:
:put [:typeof $MyVar]
получил, как и ожидал, ответ:
array
- так что ты тогда хочешь?! - негодовал я
В итоге увидел случайно, что я не дописал извлечение элемента массива, я написал так:
:put ($MyVar-"exit-code")
а надо:
:put ($MyVar->"exit-code")
Глаз на столько замылился, что спустя 100+ таких конструкций, перестал замечать
воскресенье, 6 ноября 2022 г.
Mikrotik script проверить наличие другого экземпляра и вызвать исключение
На bash мы можем заглянуть в диспетчер задач (ps) и найти процесс нашей программы, прежде чем ее запускать (здесь рассматривал). На Mikrotik же такого нету, приходится извращаться. Зачем это надо?, если один из экземпляров программы по какой то причине зависнет, а еще он использует глобальные переменные, то мы можем получить неожиданный результат, поэтому лучше избегать таких коллизий.
Сама идея проста - проверить некоторую глобальную переменную, которую создаем после проверки, но у Mikrotik свои заморочки и приходится изгаляться:
# ищем среди глобальных переменных. ошибки здесь не будет, либо "", либо id
# в отличии от поиска через get, там и ошибки, и "не моментальное заполнение" списка,
# т.е. первый экземпляр висит уже 10 сек, а переменные через get еще отсутствуют
:if ([/system script environment find where name=RunProgram]!="") do={
:log error ("There is another instance of the program running, exit")
:error message="There is another instance of the program running, exit"
}
# объявляем глобальную переменную
:global RunProgram true
...
...
...
# уничтожаем переменную
:set RunProgram
Есть более изящный вариант - проверка в текущих заданиях:
:local scriptname "MyScript"
:if ([:len [/system script job find script=$scriptname]] > 0) do={
:log error "There is another instance of the program running, exit"
:error message="There is another instance of the program running, exit"
}
Mikrotik script странности функций и массивов
Привык использовать функции не только для повторяющихся задач, но и для массивных кусков кода. Например мне нужно сформировать строку с OID из массива и передать ее по ssh, я конечно могу ее сформировать прямо внутри блока, но такая политика сделает код менее читабельным. И вот тут у скрипта Mikrotik возникает проблема - функции должны быть глобальными. Стараюсь по минимуму использовать глобальный контекст, но вызвать локальную функцию из локальной функции нельзя. Только глобальную. Даже с передачей в локальной переменной именованного массива (:local MyVar{"X"="Y";"Y"="Z"}) бывают проблемы. Поэтому приходится использовать глобальный контекст. Не забываем для глобального контекста внутри функции объявлять функцию/переменную в глобальном контексте (я бы назвал не объявлять, а инициализировать, она как бы есть, но функция о ней ничего не знает, но на сайте микротика написано declared).
Не работает:
:global MyVar 0
:local MyFunc do={
:put $MyVar
}
$MyFunc
работает:
:global MyVar 0
:local MyFunc do={
:global MyVar
:put $MyVar
}
$MyFunc
Не работает:
:local MyFunc2 do={
:return ($1+$2)
}
:local MyFunc do={
:return ([$MyFunc2 $a $b])
}
:put [$MyFunc a=2 b=3]
работает:
:global MyFunc2 do={
:return ($1+$2)
}
:local MyFunc do={
:global MyFunc2
:return ([$MyFunc2 $a $b])
}
:put [$MyFunc a=2 b=3]
Собственно если внимательно прочитать это, то таких проблем возникать не должно
Mikrotik script удалить все глобальные переменные
Примитивная задача, почему нельзя было придумать что-нибудь типа:
/system script environment clear
или
/system script environment remove *
или
:environment clear
???
приходится описывать так
:foreach var in=[/system script environment print as-value] do={
/system script environment remove ($var->".id")
}
Mikrotik remove all global variables and function
усложнили задачу, есть некоторая вероятность удаления переменных других скриптов, поэтому задаем себе правило - во всем глобальном иметь префикс, удалять будем именно по нему
# в самом начале объявляем локальную, просто чтобы видеть ее
:local pref "chksm"
# далее наша какая то программа начинается
:global chksmMyVar false
:local MyLocalVar 0
....
:global chksmTest do={
:put "TEST"
}
....
:local chksmTestLocal do={
:put "TEST LOCAL"
}
....
# далее наша какая то программа заканчивается
# удаляем глобальные переменные
:foreach var in=[/system script environment print as-value] do={
:local prefVar [:pick ($var->"name") 0 [:len $pref]];
:if ($prefVar=$pref) do={
/system script environment remove ($var->".id")
}
}
суббота, 5 ноября 2022 г.
пятница, 4 ноября 2022 г.
"Он верил что день его смерти предопределен и вера облекала его чудесной броней"
Сложно спорить с тем, что все в мире предопределено, не с точки зрения того, что кто то знает будущее, а с точки зрения того, что каждое событие ведет к определенному результату будь он в ближайшем неизвестном или в далеком. Исходя из выше сказанного, можно ли предположить что принятие неизбежности как факта уже свершившегося дал полковнику, скорее лишил его страха неминуемой смерти, а значит изменил саму суть его?
Mikrotik script добавление в массив
Задача простая - прочитать смс, сверить номер отправителя со списком разрешенных, проверить текст сообщения и принять решение. Соответственно после обработки смс, нужно его удалить, но удалять во время обхода списка смс нельзя, т.к. массив сломается. Поэтому будем складывать id сообщений в массив, а для лога мне нужны еще номер и текст, значит будет массив из массивов размерностью 3. Добавить новый элемент в массив, что может быть легче и зачем тратить на это несколько часов?
Начнем с примеров реализации добавления в массив в консоли (скрипте) Mikrotik
Первый вариант добавления в массив
[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {"0000000000001";"0000000000002";"0000000000003"}
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003
[admin@mikrotik] > :put ($arr->1)
0000000000002
[admin@mikrotik] > :set $arr ($arr,"000000000000X")
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003;000000000000X
[admin@mikrotik] > :put ($arr->3)
000000000000X
Второй вариант добавления в массив (используем длину массива для получения следующего индекса, муторный путь, но работает)
[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {"0000000000001";"0000000000002";"0000000000003"}
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003
[admin@mikrotik] > :put ($arr->([:len $arr]-1))
0000000000003
[admin@mikrotik] > :set ($arr->([:len $arr])) "000000000000X"
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003;000000000000X
[admin@mikrotik] > :put ($arr->3)
000000000000X
Третий вариант добавления в массив - "именованный"
[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {"one"="0000000000001";"two"="0000000000002";"three"="0000000000003"}
[admin@mikrotik] > :put $arr
one=0000000000001;two=0000000000002;three=0000000000003
[admin@mikrotik] > :put ("$arr"->"two")
0000000000002
[admin@mikrotik] > :set ("$arr"->"four") "0000000000004"
[admin@mikrotik] > :put $arr
four=0000000000004;one=0000000000001;three=0000000000003;two=0000000000002
[admin@mikrotik] > :put ($arr->"four")
0000000000004
Четвертый вариант добавления - массив в массив из массивов (2D массив)
[admin@mikrotik] > :global $arr [:toarray ""]
[admin@mikrotik] > :set $arr {{"0000000000001";"0000000000002";"0000000000003"};{"0000000000011";"0000000000022";"0000000000033"};{"0000000000111";"0000000000222";"0000000000333"}}
[admin@mikrotik] > :put ($arr->1)
0000000000011;0000000000022;0000000000033
[admin@mikrotik] > :set $arr ($arr,{{"0000000000XXX";"0000000000ZZZ";"0000000000YYY"}})
[admin@mikrotik] > :put ($arr->3)
0000000000XXX;0000000000ZZZ;0000000000YYY
[admin@mikrotik] > :put ($arr->0)
0000000000001;0000000000002;0000000000003
[admin@mikrotik] > :put $arr
0000000000001;0000000000002;0000000000003;0000000000011;0000000000022;0000000000033;0000000000111;0000000000222;0000000000333;0000000000XXX;0000000000ZZZ;0000000000YYY
А вот в скрипте возникает какая-то хрень, точнее вывод показывал какую-то хрень, а по факту выяснилось, что в 2х смс (но я не смог найти на телефоне) последним символом сообщения был мать его перенос строки! Да!, вот этот - "\n" символ переноса строки. Да, его видно в Winbox если поместить значение в глобальную переменную, но я грешил не на смс, а на формирование самого массива. В связи с чем пришлось искать методы обхода:
# Это функция, на входе текст, на выходе обработанный текст
:local RemoveLineBreak do={
:local textM $1
:local textMnew "";
:for i from=0 to=([:len $textM] - 1) do={
:local char [:pick $textM $i];
#:put ("|" . $char . "|") Вот так увидел что есть что-то лишнее еще на этапе получения текста из массива смс
:if ($char != "\n") do={
:set textMnew ($textMnew . $char);
};
};
:return $textMnew
}
#Применение, полагаем что TextSMS содержит в себе текст с переводом строки
:set TextSMS [ $RemoveLineBreak $TextSMS ]
вторник, 1 ноября 2022 г.
В пн с утра прямо глаз заболел, за яблоком. До вечера протерпел, утро вторника вроде не болит, встал и резко заболел. Записался к офтальмологу, осмотрела со всех сторон и сказала что ничего плохого сообщить не может. Выпейте аспирин.
К врачу днем надо было, а утром был град и шквальный ветер. Градинки напоминали крупную соль. Ветер плюс дождь оставили осадок на машине.
а дети, как и везде, х**в понарисовали на машине.
Еще и поцарапали капот :-(
воскресенье, 30 октября 2022 г.
суббота, 29 октября 2022 г.
четверг, 27 октября 2022 г.
среда, 26 октября 2022 г.
1СЗаготовка Чтение CSV (ТонкийКлиент,ВебКлиент)
Понадобилось использовать обработку на опубликованной базе и тут начались проблемы:
- Классический выбор файла здесь не работает
- Прочитать файл просто так не получилось
- Пришлось отказаться от чтения при помощи Excel (типа универсальная была)
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Excel CSV (*.csv)|*.csv";
ДиалогВыбораФайла.МножественныйВыбор=Ложь;
ДиалогВыбораФайла.Заголовок = "Выберите файл";
ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
ДиалогВыбораФайла.ИндексФильтра = 0;
ПараметрыЗагрузки.Диалог = ДиалогВыбораФайла;
ОповещениеЗавершенияВыбораФайла = Новый ОписаниеОповещения("ВыборФАйлаЗавершение", ЭтотОбъект);
ФайловаяСистемаКлиент.ЗагрузитьФайлы(ОповещениеЗавершенияВыбораФайла, ПараметрыЗагрузки); //БСП
КонецПроцедуры
&НаКлиенте
Процедура ВыборФАйлаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат<>Неопределено Тогда
ИмяФайла=Результат[0].ПолноеИмя;
АдресВХранилище=Результат[0].Хранение;
ПрочитатьФайлCSV(АдресВХранилище);
Элементы.Таблица.Обновить();
ДоступностьКнопкиСоздания();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьФайлCSV(АдресВХранилище)
Данные = ПолучитьИзВременногоХранилища(АдресВХранилище);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("csv");
Данные.Записать(ИмяПромежуточногоФайла);
УдалитьИзВременногоХранилища(АдресВХранилище); //очищаем временное хранилище
оТаблица=Новый ТаблицаЗначений;
//очищаем таблицу и удаляем колонки
Таблица.Очистить();
оТаблица=Таблица.Выгрузить();
Разделитель=";";
ЗаголовкиИзПервойСтроки=Истина;
Текст = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
//создадим колонки
ТекСтрока = Текст.ПрочитатьСтроку();
Если ТекСтрока <> Неопределено Тогда
МассивЗначений = СтрРазделить(ТекСтрока, Разделитель);
ИндексКолонки = 0;
Для Каждого ИмяКолонки Из МассивЗначений Цикл
ИмяКолонки = ?(ЗаголовкиИзПервойСтроки, "Кол"+ИндексКолонки, ИмяКолонки);
оТаблица.Колонки.Добавить(ИмяКолонки);
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
Если ЗаголовкиИзПервойСтроки Тогда
ТекСтрока = Текст.ПрочитатьСтроку();
КонецЕсли;
КонецЕсли;
Пока ТекСтрока <> Неопределено Цикл // строки читаются до символа перевода строки
НоваяСтрока = оТаблица.Добавить();
МассивЗначений = СтрРазделить(ТекСтрока, Разделитель);
ИндексКолонки = 0;
Для Каждого ТекЗначение Из МассивЗначений Цикл
Попытка
ЗначениеЯчейки=Дата(ТекЗначение+":00");
Исключение
ЗначениеЯчейки=Число(СтрЗаменить(ТекЗначение," ",""));
КонецПопытки;
НоваяСтрока[ИндексКолонки] = ЗначениеЯчейки;
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
ТекСтрока = Текст.ПрочитатьСтроку();
КонецЦикла;
//Возврат Результат;
Таблица.Загрузить(оТаблица);
//удаляем временный файл
Попытка
УдалитьФайлы(ИмяПромежуточногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры