使用Powershell的Write-Output命令将输出附加到文件.txt中:>> -Append

7

我正在创建一个脚本,希望同时使用Write-Host和Write-Output。在操作过程中,我希望从AD中提取的信息备份到一个.txt文件中。这更像是一种备份,以防我错过某些信息并需要回去重新创建工单。 我已经有了我的脚本示例,从我所看到的内容来看,应该可以正常工作。如果有更有经验的人可以帮忙看一下或指点我方向,我会非常感激。如果需要添加更多的脚本内容,我可以提供。谢谢。

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...

从活动目录中获取所有一般信息

再次感谢您的建议


当您选择接受哪个答案时,请考虑到_未来读者_的角度。对他们可能感兴趣的是您的问题展示的各种误解,涉及PowerShell中>>Write-Output和可扩展字符串(字符串插值)的使用。目前被接受的答案没有解释这些内容(也没有回答您问题的第二部分,即要求属性列表类型的输出);虽然它可能有助于您在_特定情况下_,但其他人将不会受益。 - mklement0
3个回答

4
不要使用write-output。使用(Get-ADUser $sid -properties mail).mail。 像这样:
Add-Content -Path "FilePath" -Value "Email: $((Get-ADUser $sid -properties mail).mail)"

2

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,而且它也不会被 >> 解释,后者只接受文件名操作数。
相反,-AppendWrite-Output 解释,这就是为什么它最终以字面形式出现在输出文件中的原因。
也许令人惊讶的是,虽然诸如 >> C:\psoutput\psoutput.txt 的重定向通常放在命令行的最后,但这并不是语法要求:其他参数可以跟随其后。

我希望输出结果如下:
听起来你想要 Format-List 命令提供的格式:
$object | Format-List >> C:\psoutput\psoutput.txt

请注意,> / >> / Out-File 应用默认字符串格式,即与默认在控制台中显示的表示相同。
通过使用显式的 Format-* cmdlet,您可以控制该格式,但请注意 Out-File 的两个常规事项:
- 由于您正在输出 供显示 的格式,因此生成的文件可能不适合进一步的 程序处理。 - 为了防止值被截断,您可能需要向 Out-File 传递一个 -Width 参数,使用 $FormatEnumerationLimit 控制嵌套属性的枚举长度,在 Format-Table 的情况下,指定 -AutoSize

1

你其实不需要使用 Write-Output。尝试这个方法将字符串直接写入文件:

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

你不需要指定追加,因为'>>'已经为你做了这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接