Задать вопрос
  • PowerShell. Как перенаправить вывод ошибки и в файл и в терминал одновременно?

    @MaxKozlov Куратор тега PowerShell
    нашёл у себя интерпретатор питона -
    смог перехватить ошибки вот так
    PS D:\> cat 1.py
    print('test')
    sdfsdfsf()
    PS D:\> invoke-command { python 1.py 2>&1 } -ErrorVariable e
    test
    python : Traceback (most recent call last):
    строка:1 знак:18
    + invoke-command { python 1.py 2>&1 } -ErrorVariable e
    +                  ~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Traceback (most recent call last)::String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
    
      File "1.py", line 3, in <module>
        sdfsdfsf()
    NameError: name 'sdfsdfsf' is not defined
    PS D:\> $e
    python : Traceback (most recent call last):
    строка:1 знак:18
    + invoke-command { python 1.py 2>&1 } -ErrorVariable e
    +                  ~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Traceback (most recent call last)::String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
    
      File "1.py", line 3, in <module>
        sdfsdfsf()
    NameError: name 'sdfsdfsf' is not defined
  • PowerShell. Как перенаправить вывод ошибки и в файл и в терминал одновременно?

    @MaxKozlov Куратор тега PowerShell
    в консоли пробуете ?
    если не файл писать, а на экран вывести ?
    просто $e
    протестить на нуль ? $e -eq $null ?
    оно действительно пишет в поток error ?
  • PowerShell. Как перенаправить вывод ошибки и в файл и в терминал одновременно?

    @MaxKozlov Куратор тега PowerShell
    видимо как
    Invoke-Command { g++ test.cpp -o test } -ErrorVariable e
  • PowerShell. Как перенаправить вывод ошибки и в файл и в терминал одновременно?

    @MaxKozlov Куратор тега PowerShell
    поправил оригинал, ещё вариант поинтересней скорее всего будет :)
  • Как подключиться к MySQL через Powershell 2.0?

    @MaxKozlov Куратор тега PowerShell
    для отладки не мешает [void] убрать.
    и вообще выполнять не скриптом, а построчно в самом шелле
  • Почем при запуске .exe файла через WMI Win32_Process не обрабатываются аргументы?

    @MaxKozlov Куратор тега PowerShell
    Не, в данном случае скобки в тему - тут настоящий вызов c# метода, а не функции powershell.
    а почему не работают аргументы - это к конкретному exe-шнику. тестовый запуск проходит как надо
    PS C:\> cat D:\test.cmd
    @echo %1 %2 %3 %4 >d:\111
    PS C:\> ([WMICLASS]"\\localhost\ROOT\CIMV2:win32_process").Create("d:\test.cmd /sALL /rs /msi EULA_ACCEPT=YES")
    
    
    __GENUS          : 2
    __CLASS          : __PARAMETERS
    __SUPERCLASS     :
    __DYNASTY        : __PARAMETERS
    __RELPATH        :
    __PROPERTY_COUNT : 2
    __DERIVATION     : {}
    __SERVER         :
    __NAMESPACE      :
    __PATH           :
    ProcessId        : 20280
    ReturnValue      : 0
    PSComputerName   :
    PS C:\> cat D:\111
    /sALL /rs /msi EULA_ACCEPT
  • Вывод на экран результатов внутри функции?

    @MaxKozlov Куратор тега PowerShell
    Оно не неведомым образом что-то возвращает.
    Powershell из функций (и вообще) возвращает всё что попадает в output, return для этого не нужен.
    написать Get-NetAdapter в powershell это то же самое что Get-NetAdapter | Write-Output, аналог C# - yield Get-NetAdapter
    Get-NetAdapter; Get-NetAdapter вернёт массив, например

    Если же конечным пунктом назначения окажется Host, тут-то мы это и видим. а напрямую писать в хост - Out-Host или Write-Host
  • Как убрать текст между словами из txt / xml файла?

    @MaxKozlov Куратор тега PowerShell
    Алексей, если хоть чуточку подумать, то там должен быть-join, хотя 'это не очень верно, так как слепит строки
  • Как убрать текст между словами из txt / xml файла?

    @MaxKozlov Куратор тега PowerShell
    и всё же -replace ".*<xml_catalog", "<xml_catalog" выглядит менее страшно IMHO безо всех этих просмотров назад-вперёд :)
  • Как убрать текст между словами из txt / xml файла?

    @MaxKozlov Куратор тега PowerShell
    Можно было бы и попроще :) зачем сразу пугать ?
    однако, > выведет в Unicode, для Utf-8 Лучше Set-Content использовать
  • Включение одного ps1 в другой?

    @MaxKozlov Куратор тега PowerShell
    Да всех заморочек на пару файлов :)
    могу в качестве ответа оформить пример модуля
  • Включение одного ps1 в другой?

    @MaxKozlov Куратор тега PowerShell
    Линуксу, конечно, надо нечто другое, но всегда можно использовать Join-Path
    пример psm1 части модуля я уже привёл, доложу ещё psd1
    все закомментареные поля поскипаны для краткости
    @{
    ModuleVersion = '1.0'
    GUID = '72d739dd-bddf-4d7c-a358-1a40e2ff961d'
    Description = 'test module'
    NestedModules = @('testmodule.psm1')
    }

    примеро функции, лежащей в папочке (assorted\get-tf1.ps1):
    function get-tf1 {
      'tf1'
    }

    guid, естественно надо сделать свой через [guid]::NewGuid()

    вот этих трёх файлов достаточно чтобы получить рабочий модуль (когда он загружен, даже все функции видны.)
    А если он лежит в путях ($env:PSModulePath) ему даже import-module не обязательно делать
  • Включение одного ps1 в другой?

    @MaxKozlov Куратор тега PowerShell
    - если скрипт - это скрипт с параметрами, его никто не мешает использовать "как функцию", вызывая точно также
    - если же у тебя скрипт начинается с function ... - его суём в модуль

    модули точно также можно копировать как и сами скрипты, куда-то их специально публиковать стоит только если нужно жёсткое версионирование.

    всё что надо лежит в папочках рядом с профилем
    структура такая:
    WindowsPowerShell/
      Modules/
      Scripts/
      Microsoft.PowerShell_profile.ps1


    при этом в профиле
    $home = Split-Path $profile
    $env:Path += (";{0}\Scripts" -f $home)

    Всё чего бы хотелось - вызывается. Вся структура простым копированием может распространяться куда угодно

    При этом модуль-склад может выглядеть как-то так
    pomoika/
      assorted/
      pomoika.psd1 (содержимое опущено)
      pomoika.pm1:
    Try {
        Get-ChildItem "$PSScriptRoot\assorted\*.ps1" -Exclude *.tests.ps1, *profile.ps1 | ForEach-Object {
            $Function = $_.Name
            . $_.FullName
        }
    } Catch {
        Write-Warning ("{0}: {1}" -f $Function,$_.Exception.Message)
        Continue
    }

    тогда все функции можно просто скопом навалить в assorted как вам и хотелось, а вызываться они будут сами
    единственный минус - в Get-Module pomoika -list не будет видно имён функций, в нём находящихся (но у вас их и так нигде не видно в существующей структуре)

    распространять, повторюсь, можно простым копированием, как и ваши скрипты
  • Включение одного ps1 в другой?

    @MaxKozlov Куратор тега PowerShell
    Так собственные модули для этого лучше подходят :)

    но вопрос в том, зачем в одном скрипте вместо прямого запуска другого скрипта делать .dotsource ?

    если у вас в одном файле одна функция - прямой запуск, если несколько - модуль
    Если очень не хочется модуль - уже давно есть $PSScriptRoot вместо ковыряния с MyInvocation.MyCommand.Path
  • Включение одного ps1 в другой?

    @MaxKozlov Куратор тега PowerShell
    А зачем это всё ?
  • Как скрыть курсор?

    @MaxKozlov Куратор тега PowerShell
    консоль в VSCode.

    Так с этого и надо начинать :)
    у VSCode с консолью много чего не так, как в обычном PS, там тот же PSReadline не очень работает, там поверх неё свой прокси наверчен, который, возможно, что-то от себя и гадит
    а пример с буфером и в обычной консоли не пашет
    в исходниках PSReadline можно попробовать глянуть, как он там рисует
  • Как скрыть курсор?

    @MaxKozlov Куратор тега PowerShell
    Может быть консоль какая-то не стандартная ? ConEmu или типа того ?
  • Как скрыть курсор?

    @MaxKozlov Куратор тега PowerShell
    Не повторяется, курсор вижу только после того, как всё выполнится, я увижу приглашение к вводу следующей команды и пошевелю кнопочками

    Как насчёт Powershell -noprofile ?
  • Как в C# получить данные из PowerShell?

    @MaxKozlov Куратор тега PowerShell
    Очень похоже на невнимательность и отсутствие попыток выполнить этот скрипт хотя бы в консоли.

    Может надо просто двоеточие убрать ? оно там каким боком ?

    Get-PSDrive | Select-Object * - без двоеточия в конце

    Вы вообще пробовали выводить список всех получаемых свойств ?

    foreach (var prop in obj.Properties)
                    {
                            Console.WriteLine("{0,20}: {1}", prop.Name, prop.Value);
                    }


    а можно ещё присваивать
    dynamic dynObj = psObject
    и юзать dynObj.Used

    p.s. Если с вашем скрипте нет в конце Out-String, то и просто строк не будет
  • Bind команд в Windows?

    @MaxKozlov Куратор тега PowerShell
    -Scope - это другое. это доступность алиасов внутри функций и тд

    а про сохранение самих алиасов написано в хепе к комманде

    Aliases created by using New-Alias are not saved after you exit the session or close Windows PowerShell. You can use the Export-Alias cmdlet to save your alias information to a file. You can later use Import-Alias to retrieve that saved alias information.


    то есть только, как azarij говорил - через профиль