none
Аналогии между PowerShell и cmd: вывод в файл. RRS feed

  • Вопрос

  • Здравствуйте!

    В cmd конструкция вида: .\script.ps1 >> file.txt записывает весь вывод скрипта script.ps1 в файл file.txt.

    Подскажите, пожалуйста, как сделать то же самое на PowerShell.

    Пробовал в PowerShell указать .\script.ps1 >> file.txt и .\script.ps1 | Out-File .\file.txt -- не работают.

    Файл file.txt создается, но с пустым содержимым.

    4 февраля 2016 г. 5:37

Ответы

  • можно транскрипт заюзать и не парицо

    PS C:\Users\asshole> Get-Content .\1.ps1
    Write-Host("bla-bla")
    PS C:\Users\asshole> Get-Content .\1.txt
    Get-Content : Cannot find path 'C:\Users\asshole\1.txt' because it does not exist.
    At line:1 char:1
    + Get-Content .\1.txt
    + ~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (C:\Users\asshole\1.txt:String) [Get-Content], ItemNotFoundException
        + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
    
    PS C:\Users\asshole> Start-Transcript 1.txt
    Transcript started, output file is 1.txt
    PS C:\Users\asshole> .\1.ps1
    bla-bla
    PS C:\Users\asshole> Stop-Transcript
    Transcript stopped, output file is C:\Users\asshole\1.txt
    PS C:\Users\asshole> Get-Content .\1.txt
    **********************
    Windows PowerShell transcript start
    Start time: 20160204123255
    Username  : contoso\asshole
    Machine   : computer (Microsoft Windows NT 6.1.7601 Service Pack 1)
    **********************
    Transcript started, output file is 1.txt
    PS C:\Users\asshole> .\1.ps1
    bla-bla
    PS C:\Users\asshole> Stop-Transcript
    **********************
    Windows PowerShell transcript end
    End time: 20160204123320
    **********************
    PS C:\Users\asshole>


    • Изменено Svolotch 4 февраля 2016 г. 9:45
    • Помечено в качестве ответа KazunEditor 8 февраля 2016 г. 11:20
    4 февраля 2016 г. 9:36
  • Write-Host("$($CDT): $str") заменить на Write-Output "$($CDT): $str"
    • Изменено KazunEditor 4 февраля 2016 г. 6:15
    • Помечено в качестве ответа KazunEditor 8 февраля 2016 г. 11:20
    4 февраля 2016 г. 6:14
    Отвечающий

Все ответы

  • В cmd конструкция вида: .\script.ps1 >> file.txt записывает весь вывод скрипта script.ps1 в файл file.txt. - Вранье, такая конструкция не работает в cmd.

    Содержимое файла   .\script.ps1 , приведите.

    4 февраля 2016 г. 5:48
    Отвечающий
  • Например такое содержимое:

    Write-Host("bla-bla")

    4 февраля 2016 г. 5:54
  • Например такое содержимое:

    Write-Host("bla-bla")

    Write-Host - не перенаправляет вывод, только в консоль. В PowerShell v5 появился новый параметр -InformationVariable в котором можно сохранять вывод.

    PS > Write-Host abx -InformationVariable my
    abx
    PS > $my >> $file.txt
    abx

    Лучше не использовать Write-Host вообще, если требуется вывод можно просто.

    "bla-bla" >> file.txt
    
    или
    
    Write-Output "bla-bla" >> file.txt

    Вариантов масса.

    PS. От создателя PowerShell , можно прочитать, про вредности - http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/

    • Изменено KazunEditor 4 февраля 2016 г. 6:07
    4 февраля 2016 г. 5:58
    Отвечающий
  •  Вранье, такая конструкция не работает в cmd.

    Точно работает приведенный ниже код. Но этот код на cmd, а мне нужно на PowerShell'е.

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden .\1C-Maintance.ps1 %WorkDir%\%LogName%  >> "%LogFile%"

    Мне надо записывать в файл именно вывод скрипта. Не модифицировать скрипт, чтобы он сам писал в файл, а записать в файл его вывод.

    Чтобы быть ближе к реальности вставлю кусок скрипта 1C-Maintance.ps1:

    Function WD($str) {
    	$CDT=Get-Date -uformat "%Y-%m-%d %T"
    	Write-Host("$($CDT): $str")
    }
    
    $InstallOptions = "DESIGNERALLCLIENTS=1 THINCLIENT=0 THINCLIENTFILE=0 WEBSERVEREXT=0 SERVER=0 CONFREPOSSERVER=0 CONVERTER77=0 SERVERCLIENT=1 LANGUAGES=RU"
    
    $InstallMSI = $Distr + "\" + $Version + "\1CEnterprise 8.msi"
    WD("Устанавливается версия $Version ($Distr\$Version).")
    WD("Запущена подготовка пакета $InstallMSI.")
    Start-Process -Wait -FilePath  msiexec -ArgumentList ('/jm "' + $InstallMSI + '" /t adminstallrestart.mst;1049.mst /norestart /Leo+ "' + $TempMSILog + '"')
    WD("Запущена установка версии $Version.")
    Start-Process -Wait -FilePath msiexec -ArgumentList ('/package "' + $InstallMSI + '" ' + $InstallOptions + ' /norestart /Leo+ "' + $TempMSILog + '"')
    Get-Content $TempMSILog >> $LogFile
    WD("Завершена установка версии $Version.")

    Забыл так же упомянуть, что PowerShell версии 2 (Windows XP).

    4 февраля 2016 г. 6:11
  • Write-Host("$($CDT): $str") заменить на Write-Output "$($CDT): $str"
    • Изменено KazunEditor 4 февраля 2016 г. 6:15
    • Помечено в качестве ответа KazunEditor 8 февраля 2016 г. 11:20
    4 февраля 2016 г. 6:14
    Отвечающий
  • можно транскрипт заюзать и не парицо

    PS C:\Users\asshole> Get-Content .\1.ps1
    Write-Host("bla-bla")
    PS C:\Users\asshole> Get-Content .\1.txt
    Get-Content : Cannot find path 'C:\Users\asshole\1.txt' because it does not exist.
    At line:1 char:1
    + Get-Content .\1.txt
    + ~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (C:\Users\asshole\1.txt:String) [Get-Content], ItemNotFoundException
        + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
    
    PS C:\Users\asshole> Start-Transcript 1.txt
    Transcript started, output file is 1.txt
    PS C:\Users\asshole> .\1.ps1
    bla-bla
    PS C:\Users\asshole> Stop-Transcript
    Transcript stopped, output file is C:\Users\asshole\1.txt
    PS C:\Users\asshole> Get-Content .\1.txt
    **********************
    Windows PowerShell transcript start
    Start time: 20160204123255
    Username  : contoso\asshole
    Machine   : computer (Microsoft Windows NT 6.1.7601 Service Pack 1)
    **********************
    Transcript started, output file is 1.txt
    PS C:\Users\asshole> .\1.ps1
    bla-bla
    PS C:\Users\asshole> Stop-Transcript
    **********************
    Windows PowerShell transcript end
    End time: 20160204123320
    **********************
    PS C:\Users\asshole>


    • Изменено Svolotch 4 февраля 2016 г. 9:45
    • Помечено в качестве ответа KazunEditor 8 февраля 2016 г. 11:20
    4 февраля 2016 г. 9:36
  • Простите, что долго не отвечал - Ваш совет то, что нужно.

    Вот только мою проблему это не решает, загвоздка оказалась в другом. Сейчас создам новую тему, может и там поможете.

    Спасибо за помощь!

    9 февраля 2016 г. 7:01