{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Заметки — Игорь К.: заметки с тегом скрипт",
    "_rss_description": "Блог Игоря К. о маркетинге, аналитике, фотографии и жизни...",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/blog.fossko.ru\/tags\/skript\/",
    "feed_url": "https:\/\/blog.fossko.ru\/tags\/skript\/json\/",
    "icon": "https:\/\/blog.fossko.ru\/pictures\/userpic\/userpic@2x.jpg?1610628098",
    "authors": [
        {
            "name": "Игорь К.",
            "url": "https:\/\/blog.fossko.ru\/",
            "avatar": "https:\/\/blog.fossko.ru\/pictures\/userpic\/userpic@2x.jpg?1610628098"
        }
    ],
    "items": [
        {
            "id": "575",
            "url": "https:\/\/blog.fossko.ru\/all\/kak-skachat-video-s-boosty\/",
            "title": "Как скачать видео с boosty",
            "content_html": "<p>На гитхабе, пользователь tsvtt <a href=\"https:\/\/gist.github.com\/tsvtt\/65f335fde4f873b7d2702e7294334194\">опубликовал как скачать видео с бусти<\/a>.<\/p>\n<ol start=\"1\">\n<li>Открыть страницу с видео, видео должно быть видно на странице, можно запустить, но это не обязательно.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Открыть средства разработчика в браузере<br \/>\nдля открытия нажмите<br \/>\nCtrl+Shift+C<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Открыть вкладку с консолью — Console<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Выполнить:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">document.querySelector(&#039;vk-video-player&#039;).store.actions.internal.downloadVideo()<\/code><\/pre><ol start=\"5\">\n<li>Видеоролик скачивается в максимальном качестве<\/li>\n<\/ol>\n",
            "date_published": "2026-01-01T18:02:41+03:00",
            "date_modified": "2026-01-01T19:22:23+03:00",
            "tags": [
                "скрипт"
            ],
            "_date_published_rfc2822": "Thu, 01 Jan 2026 18:02:41 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "575",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "543",
            "url": "https:\/\/blog.fossko.ru\/all\/google-skript-prosit-prava-srazu-na-vse-dokumenty\/",
            "title": "Google скрипт просит права сразу на все документы",
            "content_html": "<p>Когда Google Apps Script просит доступ ко всем документам на гугл диске.<br \/>\nЧтобы избежать проблем с доступом, добавьте в шапку скриптов код:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/**\n * @OnlyCurrentDoc\n *\/<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/image-18.png\" width=\"990\" height=\"389\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Код вставляется со всеми слешами и звездочками. <a href=\"https:\/\/developers.google.com\/apps-script\/guides\/services\/authorization?hl=ru#manual_authorization_scopes_forand\">Справка гугл документов<\/a><\/div>\n<\/div>\n",
            "date_published": "2023-12-18T11:33:08+03:00",
            "date_modified": "2023-12-18T11:33:04+03:00",
            "tags": [
                "автоматизация",
                "скрипт"
            ],
            "image": "https:\/\/blog.fossko.ru\/pictures\/image-18.png",
            "_date_published_rfc2822": "Mon, 18 Dec 2023 11:33:08 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "543",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.fossko.ru\/pictures\/image-18.png"
                ]
            }
        },
        {
            "id": "532",
            "url": "https:\/\/blog.fossko.ru\/all\/dobavlyaem-polzovatelya-k-razresheniyam-na-papku\/",
            "title": "Добавляем пользователя к разрешениям на папку",
            "content_html": "<p>Скрипт на повершеле, для добавления пользователя к разрешениям на папку<br \/>\nЭто может понадобится если нужно добавить права нового пользователя не убирая остальные права доступа. Например на папку «мои документы» определенного пользователя<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$path = &quot;e:\\system volume information\\&quot;\n$user = &quot;DOMAIN\\Administrator&quot;\n$Rights = &quot;FullControl&quot;\n\n$InheritSettings = &quot;Containerinherit, ObjectInherit&quot;\n$PropogationSettings = &quot;None&quot;\n$RuleType = &quot;Allow&quot;\n$acl = Get-Acl $path\n$perm = $user, $Rights, $InheritSettings, $PropogationSettings, $RuleType\n$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm\n$acl.SetAccessRule($rule)\n$acl | Set-Acl -Path $path<\/code><\/pre><p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/previous-versions\/ms229747(v=vs.110)?redirectedfrom=MSDN\">Правила передачи ACL<\/a>: что такое «Containerinherit, ObjectInherit»<br \/>\n<a href=\"https:\/\/coolcode.ru\/razdacha-prav-na-ntfs-iz-powershell\/\">Права доступа<\/a>: Read, Write, Modify и FullControl<\/p>\n",
            "date_published": "2023-10-05T13:25:29+03:00",
            "date_modified": "2023-10-06T15:39:45+03:00",
            "tags": [
                "системное администрирование",
                "скрипт"
            ],
            "_date_published_rfc2822": "Thu, 05 Oct 2023 13:25:29 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "532",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "531",
            "url": "https:\/\/blog.fossko.ru\/all\/skachivaem-video-s-youtube\/",
            "title": "Скачиваем видео с ютуба",
            "content_html": "<p><a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp#release-files\">Yt-dlp<\/a> — утилита для скачивания роликов с ютуба, ниже команды которые я использую чаще всего.<\/p>\n<p>Можно скачивать из других сервисов, например, рутуб.<\/p>\n<p>Одиночное видео, в имени файла будет ай-ди ролика<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yt-dlp -f &quot;22\/bestvideo[ext=mp4]+bestaudio[ext=m4a]\/best[ext=mp4]\/best&quot; &quot;https:\/\/www.youtube.com\/watch?v=NdToAHst3BY&quot;<\/code><\/pre><p>Одиночное видео<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yt-dlp -f &quot;22\/bestvideo[ext=mp4]+bestaudio[ext=m4a]\/best[ext=mp4]\/best&quot; &quot;https:\/\/www.youtube.com\/watch?v=NdToAHst3BY&quot; -o &quot;%(title)s.%(ext)s&quot;<\/code><\/pre><p>Скачиваем список роликов, ссылки лежать в файле list.txt<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yt-dlp -f &quot;22\/bestvideo[ext=mp4]+bestaudio[ext=m4a]\/best[ext=mp4]\/best&quot; -a list.txt<\/code><\/pre><p>Скачиваем плейлист<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yt-dlp -f &quot;22\/bestvideo[ext=mp4]+bestaudio[ext=m4a]\/best[ext=mp4]\/best&quot; &quot;https:\/\/www.youtube.com\/playlist?list=PLpZakfG8U02uo3HQ5dPe52yoUlcOOAssg&quot;<\/code><\/pre><p>Формат скачивания 720p<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&quot;22\/bestvideo[ext=mp4]+bestaudio[ext=m4a]\/best[ext=mp4]\/best&quot;<\/code><\/pre><p>Формат 22 обозначает 720p видео. Дальше если 720p формат недоступен, то будет загружено лучшее доступное видео формата mp4 с лучшим доступным аудио формата m4a. Если ни один из этих форматов недоступен, то будет загружено лучшее доступное видео формата mp4.<\/p>\n<p>В ВК видео чтобы скачать 720p используем команду<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">yt-dlp -f &quot;bestvideo[height&lt;=720]+bestaudio\/best[height&lt;=720]&quot;<\/code><\/pre><p>На гитхабе yt-dlp, можно посмотреть <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp#usage-and-options\">опции<\/a>, <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp#output-template-examples\">примеры использования yt-dlp<\/a>, <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/blob\/master\/supportedsites.md\">поддерживаемые сайты для скачивания<\/a><\/p>\n<p><a href=\"\/all\/kak-skachat-potokovoe-video\/\">Для скачивания с геткурса, можно использовать плагин Stream Recorder<\/a><\/p>\n",
            "date_published": "2023-09-30T23:36:56+03:00",
            "date_modified": "2024-11-08T12:25:48+03:00",
            "tags": [
                "системное администрирование",
                "скрипт"
            ],
            "_date_published_rfc2822": "Sat, 30 Sep 2023 23:36:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "531",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "530",
            "url": "https:\/\/blog.fossko.ru\/all\/kak-skachat-zaschischenny-pdf-fayl-s-gugl-diska\/",
            "title": "Как скачать защищенный pdf файл с гугл диска?",
            "content_html": "<p>Дурим Шала, <a href=\"https:\/\/gist.github.com\/dpaluy\/74258794f7930401cc27262e0ea794dd#step-by-step-guide-to-downloading-protected-pdf-from-google-drive\">обновил код по скачиванию защищенного файла с гугл диска<\/a>.<br \/>\nКод работает на сентябрь 2023 года, добавлена проверка политики безопасности, которая выводила ошибку<\/p>\n<p>Файл скачивается в виде картинок упакованных в ПДФ.<\/p>\n<h2>Руководство по загрузке защищенного PDF-файла с Google Диска<\/h2>\n<ol start=\"1\">\n<li>Откройте документ в Документах Google.<\/li>\n<li>Прокрутите документ до конца, чтобы были видны все страницы.<\/li>\n<li>Откройте «Инструменты разработчика» для этого на клавиатуре нажмите Ctrl+Shift+C<\/li>\n<li>Выберите вкладку «Консоль».<\/li>\n<li>Вставьте код и нажмите Enter.<\/li>\n<li>ПДФ скачается в виде картинок упакованных в ПДФ.<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">let trustedURL;\nif (window.trustedTypes &amp;&amp; trustedTypes.createPolicy) {\n    const policy = trustedTypes.createPolicy(&#039;myPolicy&#039;, {\n        createScriptURL: (input) =&gt; {\n            return input;\n        }\n    });\n    trustedURL = policy.createScriptURL(&#039;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/1.3.2\/jspdf.min.js&#039;);\n} else {\n    trustedURL = &#039;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/1.3.2\/jspdf.min.js&#039;;\n}\n\n\/\/ Load the jsPDF library using the trusted URL.\nlet jspdf = document.createElement(&quot;script&quot;);\njspdf.onload = function () {\n    \/\/ Generate a PDF from images with &quot;blob:&quot; sources.\n    let pdf = new jsPDF();\n    let elements = document.getElementsByTagName(&quot;img&quot;);\n    for (let i = 0; i &lt; elements.length; i++) {\n        let img = elements[i];\n        if (!\/^blob:\/.test(img.src)) {\n            continue;\n        }\n        let canvasElement = document.createElement(&#039;canvas&#039;);\n        let con = canvasElement.getContext(&quot;2d&quot;);\n        canvasElement.width = img.width;\n        canvasElement.height = img.height;\n        con.drawImage(img, 0, 0, img.width, img.height);\n        let imgData = canvasElement.toDataURL(&quot;image\/jpeg&quot;, 1.0);\n        pdf.addImage(imgData, &#039;JPEG&#039;, 0, 0);\n        if (i !== elements.length - 1) {\n            pdf.addPage();\n        }\n    }\n\n    \/\/ Download the generated PDF.\n    pdf.save(&quot;download.pdf&quot;);\n};\njspdf.src = trustedURL;\ndocument.body.appendChild(jspdf);<\/code><\/pre><p>Если хотите до загрузки изменить имя download.pdf на свое. Измените имя в строке<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">pdf.save(&quot;download.pdf&quot;);<\/code><\/pre><p>В измененном коде происходит проверка наличия поддержки Trusted Types в браузере.<\/p>\n<p>Trusted Types — механизм безопасности веб-приложений.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/kak-skachat-zaschischenny-pdf-fayl-s-gugl-diska.png\" width=\"719\" height=\"63\" alt=\"\" \/>\n<div class=\"e2-text-caption\">В некоторых браузерах стоит запрет на вставку из буфера обмена в консоль, для активации вставки, наберите в консоли — allow pasting и нажмите энтер<\/div>\n<\/div>\n<ul>\n<li><b>Присутствует поддержка Trusted Types<\/b>, создается политика Trusted Types под названием «myPolicy»  определяющая как создавать безопасные URL. Затем создается доверенный URL для загрузки скрипта jspdf.min.js.<\/li>\n<li><b> Отсутствует поддержка Trusted Types<\/b>, используется стандартный URL для загрузки скрипта.<\/li>\n<\/ul>\n<h2>Вариант скрипта с фиксированным A4 в портретной ориентации (Portrait)<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">let trustedURL;\nif (window.trustedTypes &amp;&amp; trustedTypes.createPolicy) {\n    const policy = trustedTypes.createPolicy(&#039;myPolicy&#039;, {\n        createScriptURL: (input) =&gt; input\n    });\n    trustedURL = policy.createScriptURL(&#039;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/1.3.2\/jspdf.min.js&#039;);\n} else {\n    trustedURL = &#039;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/1.3.2\/jspdf.min.js&#039;;\n}\n\nlet jspdf = document.createElement(&quot;script&quot;);\njspdf.onload = function () {\n    \/\/ PDF фиксированного размера A4\n    let pdf = new jsPDF(&#039;p&#039;, &#039;mm&#039;, &#039;a4&#039;);\n\n    let elements = document.getElementsByTagName(&quot;img&quot;);\n\n    for (let i = 0; i &lt; elements.length; i++) {\n        let img = elements[i];\n        if (!\/^blob:\/.test(img.src)) continue;\n\n        \/\/ Рисуем изображение в canvas\n        let canvasElement = document.createElement(&#039;canvas&#039;);\n        let con = canvasElement.getContext(&quot;2d&quot;);\n        canvasElement.width = img.naturalWidth;\n        canvasElement.height = img.naturalHeight;\n        con.drawImage(img, 0, 0);\n\n        \/\/ Получение JPEG из canvas\n        let imgData = canvasElement.toDataURL(&quot;image\/jpeg&quot;, 1.0);\n\n        \/\/ Вставляем картинку на лист A4 по всей странице\n        pdf.addImage(imgData, &#039;JPEG&#039;, 0, 0, 210, 297);\n\n        if (i !== elements.length - 1) {\n            pdf.addPage();\n        }\n    }\n\n    pdf.save(&quot;download.pdf&quot;);\n};\n\njspdf.src = trustedURL;\ndocument.body.appendChild(jspdf);<\/code><\/pre><h2>Вариант скрипта с фиксированным A4 в альбомной ориентации (Landscape)<\/h2>\n<pre class=\"e2-text-code\"><code class=\"\">let trustedURL;\nif (window.trustedTypes &amp;&amp; trustedTypes.createPolicy) {\n    const policy = trustedTypes.createPolicy(&#039;myPolicy&#039;, {\n        createScriptURL: (input) =&gt; input\n    });\n    trustedURL = policy.createScriptURL(&#039;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/1.3.2\/jspdf.min.js&#039;);\n} else {\n    trustedURL = &#039;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/1.3.2\/jspdf.min.js&#039;;\n}\n\nlet jspdf = document.createElement(&quot;script&quot;);\njspdf.onload = function () {\n\n    \/\/ PDF A4 landscape: 297mm × 210mm\n    let pdf = new jsPDF(&#039;l&#039;, &#039;mm&#039;, &#039;a4&#039;);\n\n    let elements = document.getElementsByTagName(&quot;img&quot;);\n\n    for (let i = 0; i &lt; elements.length; i++) {\n        let img = elements[i];\n        if (!\/^blob:\/.test(img.src)) continue;\n\n        \/\/ Создаем canvas по натуральным размерам изображения\n        let canvasElement = document.createElement(&#039;canvas&#039;);\n        let con = canvasElement.getContext(&quot;2d&quot;);\n        canvasElement.width = img.naturalWidth;\n        canvasElement.height = img.naturalHeight;\n        con.drawImage(img, 0, 0);\n\n        \/\/ Конвертируем в JPEG\n        let imgData = canvasElement.toDataURL(&quot;image\/jpeg&quot;, 1.0);\n\n        \/\/ Вставляем изображение на всю страницу A4 landscape\n        pdf.addImage(imgData, &#039;JPEG&#039;, 0, 0, 297, 210);\n\n        if (i !== elements.length - 1) {\n            pdf.addPage();\n        }\n    }\n\n    pdf.save(&quot;download.pdf&quot;);\n};\n\njspdf.src = trustedURL;\ndocument.body.appendChild(jspdf);<\/code><\/pre><h2>Пакетное скачивание защищенных пдф файлов<\/h2>\n<p><a href=\"https:\/\/github.com\/fossko\/gdrive_pdf_saver\">gdrive_pdf_saver<\/a> — проект на гитхабе, нужен питон.<\/p>\n",
            "date_published": "2023-09-27T10:21:27+03:00",
            "date_modified": "2025-11-14T09:07:46+03:00",
            "tags": [
                "системное администрирование",
                "скрипт"
            ],
            "image": "https:\/\/blog.fossko.ru\/pictures\/kak-skachat-zaschischenny-pdf-fayl-s-gugl-diska.png",
            "_date_published_rfc2822": "Wed, 27 Sep 2023 10:21:27 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "530",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.fossko.ru\/pictures\/kak-skachat-zaschischenny-pdf-fayl-s-gugl-diska.png"
                ]
            }
        },
        {
            "id": "472",
            "url": "https:\/\/blog.fossko.ru\/all\/tipograf-v-gugl-dokumentah\/",
            "title": "Типограф в гугл документах",
            "content_html": "<p>Когда используешь гугл документы для набора текстов для печати, не хватает встроенного типографа. Типограф нужен для правильного проставления неразрывного пробела, знака тире, замены кавычек на правильные.<\/p>\n<p><a href=\"https:\/\/github.com\/glebkema\/google-docs-typograf\">Скрипт от Глеба Керамского<\/a> написан на google apps script и легко адаптируется<\/p>\n<h2>Скрипт работает только в текущем документе<\/h2>\n<p>В оригинале скрипт можно запускать в определенном документе, для этого:<br \/>\nоткрываем наш гугл документ и переходим в Apps Script<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah.png\" width=\"744\" height=\"260\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Меню — расширения — Apps Script<\/div>\n<\/div>\n<p>Копируем код из скрипта Глеба и вставляем в наш скрипт<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-1.png\" width=\"1194\" height=\"866\" alt=\"\" \/>\n<div class=\"e2-text-caption\">У Глеба на гитхабе код лежит в файле <a href=\"https:\/\/github.com\/glebkema\/google-docs-typograf\/blob\/master\/Code.gs\">Code.gs<\/a><\/div>\n<\/div>\n<p>Можно остановиться на этом, но лучше в только что созданный скрипт, добавить следующее<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/**\n * @OnlyCurrentDoc\n *\/<\/code><\/pre><p>Эта строчка позволит ограничить запуск скрипта текущим документом<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-2.png\" width=\"1078\" height=\"527\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Итоговый скрипт с нашим дополнением<\/div>\n<\/div>\n<p>Дальше мы сохраняем и переходим в гугл документ.<\/p>\n<p>Для работы скрипта нужно перегрузить страницу, нажимаем CTRL+F5<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-3.png\" width=\"1278\" height=\"545\" alt=\"\" \/>\n<div class=\"e2-text-caption\">После перезагрузки страницы в этом документе появился пункт меню — typograf, при нажатии на него текст будет отипографирован.<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"729\" data-ratio=\"1.744019138756\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-4.png\" width=\"729\" height=\"418\" alt=\"\" \/>\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-5.png\" width=\"767\" height=\"649\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-caption\">Если вы запускаете скрипт первый раз, будет предложено проверить разрешение скрипта. После разрешение текст будет отипографирован.<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-6.png\" width=\"713\" height=\"412\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Пример до: висячие предлоги и дефис вместо тире.<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-7.png\" width=\"726\" height=\"396\" alt=\"\" \/>\n<div class=\"e2-text-caption\">После применения скрипта, висячие пробелы пропали и дефис поменялся на длинное тире. На самом деле тут после всех предлогов стали неразрывные пробелы.<\/div>\n<\/div>\n<p>Для применения скрипта нужно в каждом документе проделать следующие шаги:<\/p>\n<ol start=\"1\">\n<li>Зайти в гитхаб и скопировать скрипт.<\/li>\n<li>Добавить скрипт в google apps script.<\/li>\n<li>Перезагрузить документ.<\/li>\n<li>Выполнить скрипт.<\/li>\n<\/ol>\n<h2>Скрипт работает для любого документа к которому есть доступ.<\/h2>\n<p>Можно сделать один скрипт на все документы к которым есть доступ.<br \/>\nДля этого нужно сделать google apps script который не подключен к конкретному документу, для этого зайдите на гугл диск в любую папку, например «Скрипты», нажмите правой клавишей пункт Еще — google apps script<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-8.png\" width=\"768\" height=\"501\" alt=\"\" \/>\n<div class=\"e2-text-caption\">При таком создании, скрипт будет работать отдельно от документа<\/div>\n<\/div>\n<p>Рекомендую дать скрипту нормально название, например «Типограф», так будет проще искать по поиску на гугл диске.<\/p>\n<p>Копируем в наш скрипт <a href=\"https:\/\/github.com\/glebkema\/google-docs-typograf\/blob\/master\/Code.gs\">код из гитхаба Глеба.<\/a><\/p>\n<p>Теперь нам нужно модифицировать скрипт<\/p>\n<p>В функции typograf() комментируем строчку с выбором текущего файла, ставит две косые<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/var body = DocumentApp.getActiveDocument().getBody();<\/code><\/pre><p>Создаем новую переменную в которую будем вставлять урл нашего документа<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">var body = DocumentApp.openByUrl(&#039;https:\/\/docs.google.com\/document\/d\/XXXXXXX&#039;);<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-9.png\" width=\"1303\" height=\"613\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Наши изменения скрипта<\/div>\n<\/div>\n<p>Сохраняем.<\/p>\n<p>Теперь нам нужно подправить какой-то документ:<\/p>\n<ol start=\"1\">\n<li>Копируем его полный адрес<\/li>\n<li>Вставляем в переменную body — не забываем что адрес вставляется в одинарной в кавычках, у меня одинарная кавычка.<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">var body = DocumentApp.openByUrl(&#039;URL_DOC&#039;);<\/code><\/pre><p>Сохраняем.<\/p>\n<p>Осталось запустить, для этого в скрипте выбираем Типограф и кнопку «выполнить»<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-10.png\" width=\"860\" height=\"270\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Если у вас не выбран типограф — нажимаем стрелочку вниз и выбираем.<\/div>\n<\/div>\n<p>Скрипт попросит авторизацию на возможное изменения всех документов, даем ему это разрешения.<\/p>\n<p>После запуска скрипт запустится и оттипографирует ваш документ.<\/p>\n<p>Если нужно, можно вставить ссылку на другой документ, а затем еще один.<\/p>\n",
            "date_published": "2023-01-29T15:46:28+03:00",
            "date_modified": "2023-01-29T15:49:46+03:00",
            "tags": [
                "автоматизация",
                "документы",
                "скрипт"
            ],
            "image": "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah.png",
            "_date_published_rfc2822": "Sun, 29 Jan 2023 15:46:28 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "472",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css",
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-1.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-2.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-3.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-4.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-5.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-6.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-7.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-8.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-9.png",
                    "https:\/\/blog.fossko.ru\/pictures\/tipograf-v-gugl-dokumentah-10.png"
                ]
            }
        },
        {
            "id": "462",
            "url": "https:\/\/blog.fossko.ru\/all\/prostoe-rezervnoe-kopirovanie-cherez-powershell\/",
            "title": "Простое резервное копирование через повершел",
            "content_html": "<p>Потребовалось на повершеле написать скрипт резервного копирования файлов которые сделаны сегодня и вчера.<\/p>\n<p>Для копирования есть функция —  <a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.management\/copy-item?view=powershell-7.2\">Copy-Item<\/a><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Copy-Item &quot;Что-то&quot; -Destination &quot;Куда-то&quot; -force<\/code><\/pre><p>Вместо «куда-то» можно использовать переменную с папкой, например:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$path_new = &quot;F:\\backup\\&quot; #папка в которую копируем\n$path = &quot;\\\\FileServer\\backup\\&quot; # папка из которой копируют, лежит на файл сервере<\/code><\/pre><p>тогда скрипт будет как-то так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Copy-Item &quot;Что-то&quot; -Destination $path_new  -force #Копируем что-то в папку $path_new<\/code><\/pre><p>например, всё содержимое папки $path в папку $path_new<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Copy-Item $path -Destination $path_new  -force #Копируем всё содержимое папки $path в папку $path_new<\/code><\/pre><p>«Что-то» это файлы в определенной папке, созданные вчера. То есть файлы у которых дата создания отличается от сегодня на один день.<br \/>\nОпределим дату с которой мы будем считать файлы<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$date = (Get-Date).AddDays(-1) #определение в переменную даты минус сколько-то от текущей, в наем случае минус 1<\/code><\/pre><p>Теперь получим список всех файлов, в папке дата и время которых больше вчерашней даты.<br \/>\nесть особенность, что до версии powershell3, нужно писать так<\/p>\n<\/code><p>$file_copy = Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date2} #определяем все файлы которые нужно скопировать<\/p>\n<\/code><p>После версии powershell3, нужно писать так<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$file_copy = Get-ChildItem -Path $path | Where-Object -Property CreationTime -gT $date #определяем все файлы которые нужно скопировать<\/code><\/pre><p>У меня установлена старая версия, поэтому я пишу скрипт по-старому<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date} | Copy-Item -Destination $path_new -force #Копируем все файлы которые старше даты и времени $date из папки $path в папку $path_new<\/code><\/pre><p>Еще не хватает записи логов, чтобы понимать что и когда копировалось.<br \/>\nВ статье «<a href=\"https:\/\/winitpro.ru\/index.php\/2021\/03\/15\/logirovanie-powershell-scriptov\/\">Используем лог-файлы в скриптах powershell<\/a>» приводится скрипт который можно использовать:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$Logfile = $path_new+&quot;log.txt&quot; # определяем где лог-файл\n\nfunction WriteLog                #функиця записи в лог-файл\n{\nParam ([string]$LogString)\n$Stamp = (Get-Date).toString(&quot;yyyy\/MM\/dd HH:mm:ss&quot;)\n$LogMessage = &quot;$Stamp $LogString&quot;\nAdd-content $LogFile -value $LogMessage\n}<\/code><\/pre><p>Функция WriteLog — дописывает лог-файл, тем что в нее передали, например список файлов.<\/p>\n<p>Соберем скрипт полностью:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$path_new = &quot;F:\\backup\\&quot; #папка в которую копируем\n\n$Logfile = $path_new+&quot;log.txt&quot; # определяем где лог-файл\nfunction WriteLog                #функиця записи в лог-файл\n{\nParam ([string]$LogString)\n\n$Stamp = (Get-Date).toString(&quot;yyyy\/MM\/dd HH:mm:ss&quot;)\n$LogMessage = &quot;$Stamp $LogString&quot;\nAdd-content $LogFile -value $LogMessage\n}\n\n$path = &quot;\\\\FileServer\\backup\\&quot; # папка из которой копируют\nWriteLog &quot;$path копирование начато&quot;\n$date = (Get-Date).AddDays(-1) #определение в переменную даты минус сколько-то от текущей\n$file_copy = Get-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date} #определяем список файлов, для копирования и записи в лог-файл\nWriteLog &quot;$file_copy&quot;\nGet-ChildItem -Path $path | Where-Object {$_.CreationTime -gT $date} | Copy-Item -Destination $path_new -force #копирование файлов с текущей датой и временем старше -1\nWriteLog &quot;$path копирование закончено&quot;<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.fossko.ru\/pictures\/nkfile15---Podklyuchenie-k-udalennomu-rabochemu-stolu-2022-04-07-15.21.21.jpg\" width=\"667\" height=\"518\" alt=\"\" \/>\n<div class=\"e2-text-caption\">По логу можно посмотреть дату и время начала каждой операции. Это полезно, если скрипт запускается по расписанию.<\/div>\n<\/div>\n",
            "date_published": "2022-04-07T15:24:38+03:00",
            "date_modified": "2023-09-28T23:31:09+03:00",
            "tags": [
                "портфолио",
                "системное администрирование",
                "скрипт"
            ],
            "image": "https:\/\/blog.fossko.ru\/pictures\/nkfile15---Podklyuchenie-k-udalennomu-rabochemu-stolu-2022-04-07-15.21.21.jpg",
            "_date_published_rfc2822": "Thu, 07 Apr 2022 15:24:38 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "462",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.fossko.ru\/pictures\/nkfile15---Podklyuchenie-k-udalennomu-rabochemu-stolu-2022-04-07-15.21.21.jpg"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171)"
}