• При конвертации из XML в JSON с помощью PowerShell получаю пустые значения, как исправить?

    @MaxKozlov
    Вторая функция рабочая вполне. надо только названия поправить и бОльшую вложенность использовать. у вас там микс из ConvertFrom-Xml и ConvertFrom-Xml2

    PS D:\> $s = '<?xml version="1.0" encoding="utf-8"?>
    >> <Data>
    >>   <Card>
    >>     <Id>123</Id>
    >>     <CreateDate>2022-06-20T21:01:32.7727011+05:00</CreateDate>
    >>     <CardData>
    >>       <Id>456</Id>
    >>       <Value>789</Value>
    >>       <Ord>0</Ord>
    >>     </CardData>
    >>   </Card>
    >> </Data>'
    PS D:\> $xml = [xml]$s
    PS D:\> function ConvertFrom-Xml2 {
    >>   param([parameter(Mandatory, ValueFromPipeline)] [System.Xml.XmlNode] $node)
    >>   process {
    >>     if ($node.DocumentElement) { $node = $node.DocumentElement }
    >>     $oht = [ordered] @{}
    >>     $name = $node.Name
    >>     if ($node.FirstChild -is [system.xml.xmltext]) {
    >>       $oht.$name = $node.FirstChild.InnerText
    >>     } else {
    >>       $oht.$name = New-Object System.Collections.ArrayList
    >>       foreach ($child in $node.ChildNodes) {
    >>         $null = $oht.$name.Add((ConvertFrom-Xml2 $child))
    >>       }
    >>     }
    >>     $oht
    >>   }
    >> }
    PS D:\> $xml | ConvertFrom-Xml2 | ConvertTo-Json -Depth 10
    {
        "Data":  [
                     {
                         "Card":  [
                                      {
                                          "Id":  "123"
                                      },
                                      {
                                          "CreateDate":  "2022-06-20T21:01:32.7727011+05:00"
                                      },
                                      {
                                          "CardData":  [
                                                           {
                                                               "Id":  "456"
                                                           },
                                                           {
                                                               "Value":  "789"
                                                           },
                                                           {
                                                               "Ord":  "0"
                                                           }
                                                       ]
                                      }
                                  ]
                     }
                 ]
    }


    А вообще это всё потому что $xml - это не чистый PS объект, а XmlDocument
    Ответ написан
    1 комментарий
  • Как управлять сервером PostgreSQL через ansible без ssh-подключений?

    @MaxKozlov
    То есть у вас есть доступ к тому хосту к сервису постгреса ?

    Если посмотреть соответствующие модули, например
    postgresql-db
    То там есть параметр login_host - то есть можно обращаться к другому хосту
    а для самого плейбука можно использовать ansible_connection: local
    Ответ написан
    Комментировать
  • Как вывести время в формате больше 24 часов?

    @MaxKozlov
    Это проблема не powershell, а c#(.net). Классическая. Отсутствие в формате времени TimeSpan обозначений для Total*

    решается, обычно, форматированием типа
    "{0:00}:{1:mm\:ss\,ff}" -f $sum.TotalHours, $sum
    Ответ написан
    Комментировать
  • Как запустить скрипт powershell через планировщик?

    @MaxKozlov
    Если выполнять из планировщика от текущего пользователя - добавьте в параметры запуска -WindowStyle Hidden. Но мигание всё равно иногда проскакивает, так как Powershell - консольная программа...
    Полностью от него избавиться можно через костыли из wsf (vbscript/cscript)

    Если же запускаете от другого пользователя - никто работоспособность офиса не гарантирует без интерактивного сеанса.
    И микрософт прямо об этом пишет везде.
    Ответ написан
    Комментировать
  • Как решить ошибку с обновлением сертификата Центр сертификации отклоняет запрос?

    @MaxKozlov
    Ну раз сертификат уже истёк, обновить его автоматически никто не даст, о чём вам и пишут.
    Или обновлять вручную или новый делать, опять же вручную. и по ссылке от Роман Безруков
    Ответ написан
    Комментировать
  • Как можно сохранять данные определенных событий журнала Windows в файле в режиме реального времени?

    @MaxKozlov
    ... а если вам надо вот прям рилтайм, есть .net класс System.Diagnostics.EventLog
    а у него событие EventWritten
    $global:log = New-Object System.Collections.ArrayList
    $testobj = New-Object -TypeName System.Diagnostics.EventLog
    $testobj.Log = "Security"
    Register-ObjectEvent -InputObject $testobj -EventName EntryWritten -Action {
      param($sender, $e)
      [void]$global:log.Add([PSCustomObject]@{Sender = $sender; Args = $e })
    }
    
    # Смотреть потом события в переменной
    $global:log


    Заменил пример на более полезный
    Ответ написан
    6 комментариев
  • Каким образом можно осуществить backup PostgreSQl c Heroku?

    @MaxKozlov
    периодически коннектитесь к серверу и забираете данные любым удобным способом
    параметры коннекта у вас в environment вашего приложения - DATABASE_URL
    Ответ написан
    Комментировать
  • Как передать пароль exe запускаемому из powershell?

    @MaxKozlov
    Помимо файла pgpass, скорее всего будет работать переменная окружения PGPASSWORD
    в Powershell - $env:PGRASSWORD = 'Pa$$w0rd'
    Только хранить это в коде - такое себе....
    Можно хотя бы хранить их как текстовое представление SecureString - оно хотя б к компу и юзеру привязано

    Update: О, как раз пример Роман Безруков дал :)
    Ответ написан
    Комментировать
  • Как сделать, подсветку строки жирным цветом?

    @MaxKozlov
    Send-MailMessage -BodyAsHtml ....
    И сам body форматируете как хотите

    Для подсвечивания текста можно вместо
    $_.fullname, '{0:N2} Gb' -f ($len / 1Gb)}
    выдумать что-нибудь с if или просто подставляете цвет в тэг
    типа
    $colors = @{$False='green'; $True='red'}
    .........
    $_.fullname, '<font color="{1}">{0:N2} Gb</font>' -f ($len / 1Gb), $colors[$len -le 2Gb]}
    Ответ написан
    3 комментария
  • Как изменить настройки сети через скрипт без запроса подтверждения от пользователя?

    @MaxKozlov
    Можно добавить человека в группу "Операторы настройки сети" (Network Configuration Operators)
    Well-known SID S-1-5-32-556

    Но если под "обойти" вы имеете ввиду "втихаря, без прав админа" - то никак :)
    Ответ написан
    Комментировать
  • Что это за формат у даты?

    @MaxKozlov
    Это типа unixtime, только не в сеекндах а миллисекундах. Или микро, посчитайте сами :) Не помню официального названия
    и, как указал mayton2019, таймзона
    Ответ написан
  • Как в батнике создавать в папке подпапку и перекидывать туда каждые 10 созданных файлов?

    @MaxKozlov
    После конвертации можно поперекидывать примерно на основе такого монстрика

    @echo off
    
    set idx=1
    set subfolder=1
    for %%f in (*. mp4) do (
      call :inc "%%f"
    )
    goto :EOF
    
    :inc
    echo %1 - %idx% - %subfolder%
    set /a "idx+=1"
    if .%idx% == .11 (
      set /a "subfolder+=1"
      set idx=1
    )


    где вместо echo %1 - %idx% - %subfolder% будет команда создания и переноса файликов в подпапочки
    Указанный код.цикла надо поместить внутрь вашего цикла и запускать после каждого обработанного файла на папке с результатами. Ну и, конечно, передвавать в подпрограмму пути к папке для перемещения

    Доводить до ума не очень хочется, по причине, озвученной в комментарии
    А переписать эти ваши 10 строк на ps займет минимум времени
    Ответ написан
    4 комментария
  • Сбор информации и отправки. Как объединить 2 действия?

    @MaxKozlov
    Совсем китайская грамота ?
    Почитайте какую-нибудь вводную статью :)

    $body = gci -force 'E:\BASE\enm*','F:\DATE\enm*' -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {$len = 0
    gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
    $_.fullname, '{0:N2} Gb' -f ($len / 1Gb)
    }
    
    $Body = $Body -join "`r`n"
    
    Send-MailMessage -From 'test@test.ru' -To 'test@test.ru', -Subject "enm size" -Body $Body –SmtpServer '10.10.10.10'


    Если хочется на экран тоже вывести
    gci -force 'E:\BASE\enm*','F:\DATE\enm*' -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {$len = 0
    gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
    $_.fullname, '{0:N2} Gb' -f ($len / 1Gb)
    } | Tee-Object -Variable body
    
    $Body = $Body -join "`r`n"
    
    Send-MailMessage -From 'test@test.ru' -To 'test@test.ru', -Subject "enm size" -Body $Body –SmtpServer '10.10.10.10'
    Ответ написан
  • Как пройти ошибку в bat файле при присвоении имени файлам?

    @MaxKozlov
    Вы не сформулировали что именно вы хотите видеть в качестве выходного имени

    Если только part-001, part-002 и т.д., то, как и писал res2001, используйте "part-%%03d.mp4"
    Если часть исходного имени с добавкой части в конце, то можно типа "%%~ni-%%03d.mp4"

    А вообще, при отладке убирайте @echo off - будете видеть запускаемую команду со всеми подстановками
    Ответ написан
    Комментировать
  • Подключение vars с inventory_host?

    @MaxKozlov
    Это против идеологии ansible,
    вам надо получать ваши значения через факты
    https://docs.ansible.com/ansible/latest/user_guide...

    или, если совсем никак, то тащить файлы через slurp и локально ставить через set_fact
    фильтруя по дороге
    Ответ написан
    3 комментария
  • Как перенести VDS сервер Ubuntu на другой хостинг?

    @MaxKozlov
    согласен с опубликованными ответами в части "Перенастроить"
    при наличии доступа только к ssh (надеюсь, админского) относительно просто будет попробовать rear - relax and recover
    Бэкап на шелл-скриптах и базовых утилитах. При переносе могут быть проблемы только с зеркалами на btrfs и, может, udev, если основа виртуалки "другой системы"
    Ответ написан
    Комментировать
  • Чем осуществить парсинг текста в powershell?

    @MaxKozlov
    пока отвечу а второй вопрос
    Get-Eventlog -logname Security -After Get-Date -Format "dd mm yyyy" -InstanceId 4624 | Format-List

    Парсер вас просто не понимает. Возьмите в скобки.

    Get-Eventlog -logname Security -After (Get-Date -Format "dd mm yyyy" ) -InstanceId 4624 | Format-List

    И формат лишний-там тип datetime, а не строка
    Get-Eventlog -logname Security -After (Get-Date).Date -InstanceId 4624 | Format-List


    Если вы хотите дальше как-то выбирать или сортировать - уберите format-list. Это уже вывод на консоль, с которым дальше делать что-то сложно

    Теперь первый вопрос.

    Имя логина содержится в ReplacementStrings[5]
    Поиск и фильтрация осуществляется примерно так

    Get-Eventlog -logname Security -After (Get-Date).Date -InstanceId 4624 | Where-Object { $_.ReplacementStrings[5] -match 'pupkin' -and $_.TimeGenerated -lt '2022-05-05 11:00'}


    можно группировать по логину
    Get-Eventlog -logname Security -After (Get-Date).Date -InstanceId 4624 | Group-Object { $_.ReplacementStrings[5] }


    Пример выборки полей
    Get-Eventlog -logname Security -After (Get-Date).Date -InstanceId 4624 | Select-Object @{n='Username'; e={$_.ReplacementStrings[5]}}, TimeGenerated
    Ответ написан
    1 комментарий
  • Как узнать стоит ли софт для просмотра целостности рейда или нет в Windows Core?

    @MaxKozlov
    гугль по "megaraid cmd" показывает ссылки на некую утилиту megacli
    поищите её саму и инфу по ней
    Ответ написан
    Комментировать
  • Как правильно сохранить переменную после нажатия кнопки?

    @MaxKozlov
    Вот этот вот кусок вообще не имеет смысла
    $but_imei.Add_Click(
        {
        IMEI
        dateusers 
        $phone = $itembox.SelectedItem
        write-host = $phone
        }
        )

    Если IMEI и dateusers это не функции без параметров
    а "write-host = $phone" конечно не синтаксическая ошибка благодаря функционалу write-host, но очень на неё похожа

    В целом же, если разберётесь с ошибками, код рабочий
    Вот в таком виде выдаёт на консоль содержимое комбобокса
    add-type -AssemblyName System.Windows.Forms
    $Form = New-Object System.Windows.Forms.Form
    $Form.Size = New-Object System.Drawing.Size(500,400)
    $Form.StartPosition = "CenterParent"
    $itembox = New-Object System.Windows.Forms.ComboBox
        $itembox.AutoSize = 1
        $itembox.Location = New-Object System.Drawing.Point(40,40)
    $itembox.DataSource = @("Samsung A12", "Redmi Note A6", "Другое:", "4")
    $but_imei = New-Object System.Windows.Forms.Button
        $but_imei.text = "Записать"
        $but_imei.Location = "400,100"
        $but_imei.AutoSize = 1
        $but_imei.Add_Click(
        {
          write-host $itembox.SelectedItem -fore green
        }
        )  
    $Form.Controls.Add($itembox)
    $Form.Controls.Add($but_imei)
    $Form.ShowDialog()
    Ответ написан
    7 комментариев