2015-03-24 3 views
0

У меня есть следующий простой скрипт, который просто запрашивает имя папки, имя файла и 5 имен людей. Но после того, как я закончил, текст не сохраняется внутри текстового файла. Я бы хотел, чтобы текстовый файл был удален при повторном запуске, но чтобы текст был в файле, пока я не перезапущу скрипт. Помогите?Скрипт Powershell, не сохраняющий текстовый файл после выполнения сценария

$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 
+0

Используйте что-то, кроме 'Write-Host', чтобы писать в конвейер. –

+0

Как вы узнаете, какой файл удалить при следующем запуске, если вы берете имя файла из пользовательского ввода? – arco444

+0

Предполагается, что пользователь выбрал то же имя файла и имя той же папки. В противном случае он просто сделает новые данные. – OysterMaker

ответ

2

Проблема, как отметил Этан, является использование Write-Host. Командлет Write-Host предназначен исключительно для отправки текста на экран (хост PS) и НЕ отправляет данные по конвейеру. Это исключение из того, как работают все командлеты PowerShell, поскольку вы не можете передать его в другие командлеты. Итак, вы пишете содержимое файла на экране, а затем передаете $ null через конвейер в Out-File, который перезаписывает ваш файл нулевыми данными, удаляя все содержимое.

Если вы действительно хотите, чтобы текст шел как на экран, так и на файл, либо выполняйте их как две отдельные команды, либо смотрите командлет Tee-Object.

+0

Использование Tee-Object сработало для меня. Спасибо, сэр! – OysterMaker

2

Piggy-поддержка на пост jbsmith, в просто измените последнюю строку на это:

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

что приведет к выходу на экран, а также в конечном итоге в текстовом файле, как вы просили.

Смежные вопросы