脚本执行完后,Powershell脚本不保存文本文件

时间:2015-03-24 15:44:02

标签: powershell

我有以下简单脚本,只是提示用户输入文件夹名称,文件名和5个人名。但在完成后,文本不会保存在文本文件中。我希望在重新运行时删除文本文件,但是在我重新运行脚本之前将文本放在文件中。帮助

$folderName = Read-Host "Please enter the name you want the new folder to have: "
$fileName = Read-Host "Please enter the name you want the new file to have: "
$count = 1
$folder = New-Item C:\Users\Administrator\Desktop  -ItemType directory -Name $folderName -force
$file = New-Item C:\Users\Administrator\Desktop\$folderName\$fileName.txt  -ItemType file -force
while($count -lt 6){
    $name = Read-Host "Please enter the name for person" $count
    $name | Add-Content $file 
    $count++
}
$display = Read-Host "How many names from 1 to 5 would you like to see? "
Write-Host (Get-Content $file -TotalCount $display | Out-String)  "`n", "`r`n" | Out-File $file

2 个答案:

答案 0 :(得分:2)

正如Etan评论的那样,问题在于使用Write-Host。 Write-Host cmdlet仅用于将文本发送到屏幕(PS主机),不通过管道发送数据。几乎所有PowerShell cmdlet的工作原理都是例外,因为您无法将其传输到其他cmdlet中。因此,您将文件内容写入屏幕,然后通过管道将$ null传递给Out-File,后者用空数据覆盖您的文件,删除所有内容。

如果您确实希望文本同时显示在屏幕和文件中,请按顺序将它们作为两个单独的命令执行,或者查看Tee-Object cmdlet。

答案 1 :(得分:2)

在jbsmith的帖子上小猪支持,只需将最后一行更改为:

Write-Output (Get-Content $file -TotalCount $display | Out-String)  "`n", "`r`n" | Tee-object -File $file -Append

这将导致输出到屏幕并最终在文本文件中,正如您所要求的那样。