Foo::password.annotations
список аннотаций на имущество. В вашем коде вы использовали @field:
use target сайта, что означает, что аннотация применяется к вспомогательному полю, а не к свойству. Поэтому список аннотаций на объекте пуст.
Вариант Java работает, потому что он загружает список аннотаций на поле.
Просто выводить что-то - PowerShell - это вещь красоты - и одна из ее самых сильных сторон. Например, общее приложение Hello, World! сводится к одной строке:
"Hello, World!"
Оно создает строковый объект, присваивает вышеупомянутое значение, и, будучи последним элементом в командном конвейере, вызывает метод .toString()
и выводит результат в STDOUT
(по умолчанию). Красота.
Другие команды Write-*
специфичны для вывода текста в связанные с ними потоки и имеют свое место.
, Какова была бы правильная вещь использовать для записи в 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
литий> ул.> желательный поведение :
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; это поток для записи данные (результаты) к.
Write-Output "Honey, I'm $HOME"
и "Honey, I'm $HOME"
эквивалентны, с последним не только быть более кратким, но также и быстрее. Вы можете использовать любой из них в вашем сценарии, поскольку они пишут в потоки по умолчанию (выход и ошибка). Если вы были выведены трубопроводы в другой Commentled, вы бы хотели использовать вывод записи , который в конечном итоге завершится в -хосте .
Эта статья описывает различные варианты вывода: PowerShell O для выхода
Я думаю, что в этом случае вам понадобится вывод записи .
Если у вас есть скрипт, похожий на скрипт
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» обратно к разработчикам.