Запись-вывод powershell с >> в файл .txt -Append - PullRequest
2 голосов
/ 05 марта 2020

Я создаю сценарий и хочу использовать Write-Host и Write-Output. Когда я работаю, я хочу, чтобы резервная копия информации, которую я извлекал из AD, также прикреплялась к TXT-файлу. Это скорее резервная копия на случай, если я пропущу часть информации и мне нужно go вернуться назад и пересоздать билет. В любом случае, у меня есть образец моего сценария, из которого я могу сказать, что он должен работать. Если кто-то с немного большим опытом может взглянуть или направить меня в правильном направлении, я был бы признателен. Если мне нужно добавить еще скрипт, я могу предоставить это. Заранее спасибо.

Import-Module activedirectory
$object = Get-ADUser $sid -Properties * | Select-Object EmailAddress
Write-Host Email: $object.EmailAddress
Write-Output ("Email: $object.EmailAddress") >> C:\psoutput\psoutput.txt -Append

Это, конечно, создаст файл .txt, но также добавит другую информацию, такую ​​как:

Email: @{GivenName=myfirstname; Surname=mylastname; SamAccountName=myid; DisplayName=lastname, firstname - Contingent Worker; City=; EmailAddress=myemailaddress@mywork.com; EmployeeID=; Enabled=True; OfficePhone=; MobilePhone=(555) 555-5555; LockedOut=False; LockOutTime=0; AccountExpirationDate=05/09/2020 00:00:00; PasswordExpired=False; PasswordLastSet=12/03/2019 12:16:37}.EmailAddress
-Append

Я хочу получить вывод, подобный следующему ...

name: username
email: user email address
phone: user phone number
etc...

Вся общая информация из Active Directory

Еще раз спасибо за предложения

Ответы [ 3 ]

0 голосов
/ 05 марта 2020

Не использовать запись-вывод. Используйте (Get-ADUser $sid -properties mail).mail. Как это:

Add-Content -Path "FilePath" -Value "Email: $((Get-ADUser $sid -properties mail).mail)"
0 голосов
/ 05 марта 2020

Write-Output ("Email: $object.EmailAddress")

Как отступление: здесь не нужно (...).

Это не то, что вы ожидаете это: он преобразует $object в целом и затем добавляет .EmailAddress дословно ; для встраивания выражения , например, доступа к свойству внутри "..." (расширяемая строка), вам необходим $(), оператор подвыражения .

Write-Output "Email: $($object.EmailAddress)" >> C:\psoutput\psoutput.txt

См. этот ответ для обзора синтаксиса в расширяемых строках PowerShell.

Или, больше просто с использованием PowerShell неявное выходное поведение (использование Write-Output редко требуется) :

"Email: $($object.EmailAddress)" >> C:\psoutput\psoutput.txt

>> C:\psoutput\psoutput.txt -Append

>> фактически является псевдонимом для Out-File -Append (точно так же, как > только для Out-File), так что не только необходимость для -Append, не интерпретируется >>, который принимает только операнд имени файла.
Вместо -Append интерпретируется Write-Output, именно поэтому он буквально оказался в вашем выходном файле.
Возможно, это удивительно, хотя перенаправление, такое как >> C:\psoutput\psoutput.txt, равно , как правило , помещено last в командной строке, который не является требованием syntacti c: могут следовать другие аргументы.


Я хочу получить вывод, подобный следующему ..

Звучит так требуется форматирование в соответствии с Format-List командлетом :

$object | Format-List >> C:\psoutput\psoutput.txt

Обратите внимание, что > / >> / Out-File применяется default форматирование строки, то есть то же представление, которое по умолчанию будет отображаться в консоли .

Используя явный командлет Format-*, вы можете управлять этим форматированием, но обратите внимание две вещи о Out-File в целом:

  • Когда вы выводите форматы для отображения , результирующий файл может не подходить для дальнейшей программирования c обработки .

  • Чтобы предотвратить усечение значений, вам может потребоваться передать аргумент -Width в Out-File, управлять перечислением длина вложенных свойств с $FormatEnumerationLimit, а в случае Format-Table укажите -AutoSize.

0 голосов
/ 05 марта 2020

Вам вообще не нужно использовать Write-Output вообще. Попробуйте это, чтобы получить строку в файл:

("Email: " + $object.EmailAddress) >> C:\psoutput\psoutput.txt

Вам не нужно указывать append, потому что '>>' уже делает это за вас

...