Как произвести что-то в PowerShell

Foo::password.annotations список аннотаций на имущество. В вашем коде вы использовали @field: use target сайта, что означает, что аннотация применяется к вспомогательному полю, а не к свойству. Поэтому список аннотаций на объекте пуст.

Вариант Java работает, потому что он загружает список аннотаций на поле.

197
задан Squashman 26 November 2018 в 05:02
поделиться

4 ответа

Просто выводить что-то - PowerShell - это вещь красоты - и одна из ее самых сильных сторон. Например, общее приложение Hello, World! сводится к одной строке:

"Hello, World!"

Оно создает строковый объект, присваивает вышеупомянутое значение, и, будучи последним элементом в командном конвейере, вызывает метод .toString() и выводит результат в STDOUT (по умолчанию). Красота.

Другие команды Write-* специфичны для вывода текста в связанные с ними потоки и имеют свое место.

189
ответ дан 23 November 2019 в 05:15
поделиться

, Какова была бы правильная вещь использовать для записи в Windows, эквивалентный из stdout?

В [1 123] эффект , но очень , к сожалению , и Windows PowerShell и Ядро PowerShell с v7.0, отправляют весь из их 6(!) потоки вывода к [1 126] stdout когда названный от внешнего , через PowerShell CLI.

  • Видят этот выпуск GitHub для обсуждения этого проблематичного поведения, которое, вероятно, не будет зафиксировано ради обратной совместимости.

  • На практике, это означает, что безотносительно потока PowerShell Вы отправляете, вывод к [1 128] будет рассматриваться как [1 129] stdout, произведенный внешним вызывающим абонентом:

    • , Например, при выполнении следующего cmd.exe Вы будете видеть никакой вывод, потому что stdout перенаправление к NUL применяется одинаково ко всем потокам PowerShell:

      <ул.> <литий> C:\>powershell -noprofile -command "Write-Error error!" >NUL
    • Однако - любопытно - , если Вы stderr перенаправления, PowerShell делает , отправляют его поток сообщений об ошибках в stderr, так, чтобы с 2> Вы могли получать вывод потока сообщений об ошибках выборочно; следующие выводы всего 'hi' - вывод потока успеха - при получении потока сообщений об ошибках производят в файле err.txt:

      <ул.> <литий> C:\>powershell -noprofile -command "'hi'; Write-Error error!" 2>err.txt

желательный поведение :

  • Отправляют PowerShell поток вывода успеха (номер 1) к [1 136] stdout.
  • Отправляют вывод от [1 193] все другие потоки к [1 138] stderr, который является единственной опцией, учитывая, что между [1 139] процессы только [1 140] 2 потоки вывода существуют - stdout (стандартный вывод) для [1 141] данные , и stderr (стандартная погрешность) для сообщений об ошибках и все другие типы сообщений - такие как информация о статусе - которые не являются данные .

  • желательно сделать это различие в Вашем коде, даже при том, что это в настоящее время не уважают .

<час>

Внутренний PowerShell:

  • Write-Host для [1 145], дисплей произвел , и обходы поток вывода успеха - как таковой, его вывод не может ни быть (непосредственно) получен в переменной, ни подавлен, ни перенаправлен.

    • Его исходное намерение состояло в том, чтобы просто создать отзывы пользователей и создать простые, основанные на консоли пользовательские интерфейсы (окрашенный выводом).

    • из-за предшествующей неспособности, которая будет получена или перенаправлена, версия 5 PowerShell сделала Write-Host к недавно представленный поток информации (номер 6), поэтому с тех пор возможно получить и перенаправить Write-Host вывод.

  • Write-Error предназначен для [11 100] запись незавершение ошибки к поток сообщений об ошибках (номер 2); концептуально, поток сообщений об ошибках является эквивалентом stderr.

  • Write-Output записи к успех [произвел] поток (номер 1), который концептуально эквивалентен stdout; это поток для записи данные (результаты) к.

    • Однако конкретный вид использования [1 116] редко необходим из-за PowerShell неявный вывод функция : <ул.> <литий> Вывод от любой команды или выражения, которое явно не получено, подавила или перенаправила, автоматически отправлены в поток успеха ; например, Write-Output "Honey, I'm $HOME" и "Honey, I'm $HOME" эквивалентны, с последним не только быть более кратким, но также и быстрее.
1
ответ дан 23 November 2019 в 05:15
поделиться

Вы можете использовать любой из них в вашем сценарии, поскольку они пишут в потоки по умолчанию (выход и ошибка). Если вы были выведены трубопроводы в другой Commentled, вы бы хотели использовать вывод записи , который в конечном итоге завершится в -хосте .

Эта статья описывает различные варианты вывода: PowerShell O для выхода

7
ответ дан 23 November 2019 в 05:15
поделиться

Я думаю, что в этом случае вам понадобится вывод записи .

Если у вас есть скрипт, похожий на скрипт

Write-Output "test1";
Write-Host "test2";
"test3";

, если вы вызываете скрипт с перенаправленным выходом, что-то вроде YourScript.ps1> out.txt , вы получите test2 Экран TEST1 \ NTEST3 \ N в «Out.txt».

Обратите внимание, что «TEST3» и линия записи записи всегда будут добавлять новую строку в ваш текст, и в PowerShell нет возможности остановить это (то есть Echo -n невозможно в PowerShell с родными командами). Если вы хотите (несколько базовый и простой в Bash ) функциональность echo -n , затем см. Ответ Samthebest .

Если пакетный файл запускает команду PowerShell, она, скорее всего, будет захватывать команду записи. У меня были «длинные дискуссии» с системными администраторами о том, что следует записать на консоль и что не стоит. Теперь мы согласились с тем, что единственная информация, если сценарий успешно выполнен или умер, должен быть -хост записи , и все, что является автор сценария, возможно, необходимо знать о выполнении (какие предметы были обновлены, Какие поля были установлены, et cetea) идет к выводу записи. Таким образом, когда вы отправляете скрипт в системный администратор, он может легко runtheScript.ps1> someredirectenoutoutput.txt и см. На экране, если все в порядке. Затем отправьте «SomeredirectedOutOutput.txt» обратно к разработчикам.

117
ответ дан 23 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: