如果我去掉最后一行Out-File "HDDresults.txt"
,那么输出将以正确的格式显示在屏幕上,只是所有计算机及其序列号的长列表。如果我试图输出到一个文件,每个计算机条目都会覆盖上一个条目,所以当脚本执行完毕时,文件中只有最后一个条目。如何使文件输出看起来与控制台输出完全一样?
我不知道怎么写剧本。我只是从多个来源复制和粘贴,直到我得到了一些有效的东西。
Import-Module ActiveDirectory
Get-ADComputer -filter * | Foreach-Object {
Get-WmiObject Win32_PhysicalMedia -computer $_.name |
Format-Table __server, Tag, SerialNumber |
Out-File "HDDresults.txt"
}
您只需设置-Append
标志:
Out-File "HDDresults.txt" -Append
默认情况下,Out-File
会为每次写入操作覆盖文件的内容。这将导致它在文件末尾添加文本。
虽然添加-Append
参数会使脚本发挥作用,但我认为更好的解决方案是将Select
语句及其后面的所有语句移到ForEach
循环之外,以便在处理完所有信息后将文件写入一次,而不必为每个系统打开、写入、关闭、再次打开、写入和再次关闭文件。
Import-Module ActiveDirectory
Get-ADComputer -filter * |
Foreach-Object { Get-WmiObject Win32_PhysicalMedia -computer $_.name } |
Format-Table __server, Tag, SerialNumber |
Out-File "HDDresults.txt"