none
Планировщик задач "ломает" вывод скрипта

    Вопрос

  • есть powershell скрипт:

    $User = "test@domain.com"
    $File = "C:\scripts\backup\Password.txt"
    $dayago = get-date (get-date).addDays(-3) -UFormat %Y-%m-%d
    [string[]] $toAddress="demo@domain.com"
    $MyCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $File | ConvertTo-SecureString)
    $time = get-date (get-date).addDays(-2) -UFormat %Y-%m-%d
    Get-ChildItem -recurse \\backup.server1.domain.com\winbackup\ActiveDirectoryServices\$time | where {$_.Name -like "*.vhdx"} | fl -Property CreationTime,Directory,Length,Name > C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace('\\backup.server1.domain.com\winbackup\ActiveDirectoryServices\', '') | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace($time, '') | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace($dayago, '') | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace('WindowsImageBackup\HYPER-1\Backup', '') | Set-Content C:\scripts\backup\$time.txt
    $body = Get-Content C:\scripts\backup\$time.txt | Out-String
    Send-MailMessage -To $toAddress -From "Scan User <$User>" -Subject "Hyper-V Backup $time" -Body "$body" -SmtpServer smtp.office365.com -Credential $MyCredential -UseSsl

    если его запустить из PowerShell ISE - то всё ок, приходит письмо с нужным содержимым:

    Get-Content C:\scripts\backup\$time.txt
    CreationTime : 14.04.2018 00:35:02 Directory : \DC1\ 223019 Length : 10244587520 Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx CreationTime : 14.04.2018 04:29:19 Directory : \VPN3 \ 021554 Length : 33277607936 Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx CreationTime : 14.04.2018 04:00:53 Directory : \TFS1\ 233446 Length : 384288423936 Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx CreationTime : 14.04.2018 01:34:33 Directory : \SRV2\ 223515 Length : 159423397888 Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx CreationTime : 14.04.2018 04:15:43 Directory : \tools\ 020111 Length : 34460401664 Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx

    А вот если засунуть скрипт в планировщик задач, то и содержимое файла, и письма получается кривым. Мало того, что он не заменяет нужные строчки, так он ещё и переносит на другую строку:

    Get-Content C:\scripts\backup\$time.txt
    
    CreationTime : 14.04.2018 00:35:02
    Directory    : \DC1\WindowsImageBackup\HYPER-1\Backu
                   p  223019
    Length       : 10244587520
    Name         : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx
    
    CreationTime : 14.04.2018 04:29:19
    Directory    : \VPN3\WindowsImageBackup\HYPER-1\B
                   ackup  021554
    Length       : 33277607936
    Name         : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx
    
    CreationTime : 14.04.2018 04:00:53
    Directory    : \TFS1\WindowsImageBackup\HYPER-1\Back
                   up  233446
    Length       : 384288423936
    Name         : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx
    
    CreationTime : 14.04.2018 01:34:33
    Directory    : \SRV2\WindowsImageBackup\HYPER-1\Ba
                   ckup  223515
    Length       : 159423397888
    Name         : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx
    
    CreationTime : 14.04.2018 04:15:43
    Directory    : \tools\WindowsImageBackup\HYPER-1\Bac
                   kup  020111
    Length       : 34460401664
    Name         : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx

    Спасибо!

    16 апреля 2018 г. 9:27

Ответы

  • Foreach ($tmpresult in $tmpresults) {
        "CreationTime : $($tmpresult.CreationTime)" | out-file C:\scripts\backup\$time.txt -append
        "Directory : $($tmpresult.Directory)" | out-file C:\scripts\backup\$time.txt -append
        "Length : $($tmpresult.Length)" | out-file C:\scripts\backup\$time.txt -append
        "Name : $($tmpresult.Name) `r`n" | out-file C:\scripts\backup\$time.txt -append
    }
    Действительно слегка тупанул - преобразование свойств в кавычках должно происходить в "$(...)". Так по идее должно работать


    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 16 апреля 2018 г. 11:24
    • Помечено в качестве ответа Anahaym 16 апреля 2018 г. 12:41
    16 апреля 2018 г. 11:23
    Модератор
  • Вывод FL зависит от размера окна

    для проверки что вы получаете разный результат можете сделать такие настройки окна

    и опять запустить 2 скрипта


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа Anahaym 16 апреля 2018 г. 12:41
    16 апреля 2018 г. 12:27
    Модератор

Все ответы

  • проверьте ваш промежуточный файл, скорее всего он содержит неправильный вывод. Если это так, то преобразовуйте перед выводом в файл результаты в строку, как показал Kazun в прошлой теме

    The opinion expressed by me is not an official position of Microsoft

    16 апреля 2018 г. 9:31
    Модератор
  • ещё раз повторю:
    - если скрипт запускать из PowerShell - всё хорошо. Сам файл содержит нормальный вывод.
    - если этот же скрипт запускать из планировщика задач, то файл содержит кривой вывод и соответветно этот кривой вывод и приходит на почту.

    16 апреля 2018 г. 9:51
  • Вывод скрипта зависит от параметра Width консоли powershell.

    Так как планировщик по умолчанию запускает cmd, а из него запускает powershell размер окна крайне мал, и выпод будет поломан.Можете в этом убедиться сами если проделаете упомянутые действия руками. Для того что бы преобразования на лету не происходило попробуйте исплользовать Out-String перед ">" и\или "Out-File" и\или "Set-Content"


    The opinion expressed by me is not an official position of Microsoft


    16 апреля 2018 г. 9:58
    Модератор
  • Вывод скрипта зависит от параметра Width консоли powershell.

    Так как планировщик по умолчанию запускает cmd, а из него запускает powershell размер окна крайне мал, и выпод будет поломан.Можете в этом убедиться сами если проделаете упомянутые действия руками. Для того что бы преобразования на лету не происходило попробуйте исплользовать Out-String перед ">" и\или "Out-File" и\или "Set-Content"


    The opinion expressed by me is not an official position of Microsoft

    не помогло:

    (Get-Content C:\scripts\backup\$time.txt).replace('\\backup.server1.domain.com\winbackup\ActiveDirectoryServices\', '') | Out-String | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace($time, '') | Out-String | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace($dayago, '') | Out-String | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace('WindowsImageBackup\HYPER-1\Backup', '') | Out-String | Set-Content C:\scripts\backup\$time.txt
    16 апреля 2018 г. 10:11
  • вы одну строку пропустили

    Get-ChildItem -recurse \\backup...

    с телефона увы не могу ее полностью скопировать


    The opinion expressed by me is not an official position of Microsoft

    16 апреля 2018 г. 10:15
    Модератор
  • вы одну строку пропустили

    Get-ChildItem -recurse \\backup...

    с телефона увы не могу ее полностью скопировать


    The opinion expressed by me is not an official position of Microsoft

    не помогло:

    Get-ChildItem -recurse \\backup.server1.domain.com\winbackup\ActiveDirectoryServices\$time | where {$_.Name -like "*.vhdx"} | fl -Property CreationTime,Directory,Length,Name | Out-String > C:\scripts\backup\$time.txt
    16 апреля 2018 г. 10:34
  • Попробуйте заменить последнюю строку которую мы обсуждали на это:

    new-item C:\scripts\backup\$time.txt -itemtype file -force
    $tmpresults = Get-ChildItem -recurse \\backup.server1.domain.com\winbackup\ActiveDirectoryServices\$time | where {$_.Name -like "*.vhdx"} | select CreationTime,Directory,Length,Name
    Foreach ($tmpresult in $tmpresults) {
        "$tmpresult.CreationTime" | out-file C:\scripts\backup\$time.txt -append
        "$tmpresult.Directory" | out-file C:\scripts\backup\$time.txt -append
        "$tmpresult.Length" | out-file C:\scripts\backup\$time.txt -append
        "$tmpresult.Name `r`n" | out-file C:\scripts\backup\$time.txt -append
    }


    The opinion expressed by me is not an official position of Microsoft


    16 апреля 2018 г. 10:44
    Модератор
  • уже луше. но ещё с повторением и не в формате Format-List:

    @{CreationTime=04/14/2018 00:35:02; Directory=\DC1\  223019; Length=10244587520; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.CreationTime
    @{CreationTime=04/14/2018 00:35:02; Directory=\DC1\  223019; Length=10244587520; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Directory
    @{CreationTime=04/14/2018 00:35:02; Directory=\DC1\  223019; Length=10244587520; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Length
    @{CreationTime=04/14/2018 00:35:02; Directory=\DC1\  223019; Length=10244587520; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Name 
    
    @{CreationTime=04/14/2018 04:29:19; Directory=\VPN3\  021554; Length=33277607936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.CreationTime
    @{CreationTime=04/14/2018 04:29:19; Directory=\VPN3\  021554; Length=33277607936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Directory
    @{CreationTime=04/14/2018 04:29:19; Directory=\VPN3\  021554; Length=33277607936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Length
    @{CreationTime=04/14/2018 04:29:19; Directory=\VPN3\  021554; Length=33277607936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Name 
    
    @{CreationTime=04/14/2018 04:00:53; Directory=\TFS1\  233446; Length=384288423936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.CreationTime
    @{CreationTime=04/14/2018 04:00:53; Directory=\TFS1\  233446; Length=384288423936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Directory
    @{CreationTime=04/14/2018 04:00:53; Directory=\TFS1\  233446; Length=384288423936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Length
    @{CreationTime=04/14/2018 04:00:53; Directory=\TFS1\  233446; Length=384288423936; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Name 
    
    @{CreationTime=04/14/2018 01:34:33; Directory=\SRV2\  223515; Length=159423397888; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.CreationTime
    @{CreationTime=04/14/2018 01:34:33; Directory=\SRV2\  223515; Length=159423397888; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Directory
    @{CreationTime=04/14/2018 01:34:33; Directory=\SRV2\  223515; Length=159423397888; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Length
    @{CreationTime=04/14/2018 01:34:33; Directory=\SRV2\  223515; Length=159423397888; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Name 
    
    @{CreationTime=04/14/2018 04:15:43; Directory=\tools\  020111; Length=34460401664; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.CreationTime
    @{CreationTime=04/14/2018 04:15:43; Directory=\tools\  020111; Length=34460401664; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Directory
    @{CreationTime=04/14/2018 04:15:43; Directory=\tools\  020111; Length=34460401664; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Length
    @{CreationTime=04/14/2018 04:15:43; Directory=\tools\  020111; Length=34460401664; Name=a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx}.Name 
    16 апреля 2018 г. 11:05
  • Foreach ($tmpresult in $tmpresults) {
        "CreationTime : $($tmpresult.CreationTime)" | out-file C:\scripts\backup\$time.txt -append
        "Directory : $($tmpresult.Directory)" | out-file C:\scripts\backup\$time.txt -append
        "Length : $($tmpresult.Length)" | out-file C:\scripts\backup\$time.txt -append
        "Name : $($tmpresult.Name) `r`n" | out-file C:\scripts\backup\$time.txt -append
    }
    Действительно слегка тупанул - преобразование свойств в кавычках должно происходить в "$(...)". Так по идее должно работать


    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 16 апреля 2018 г. 11:24
    • Помечено в качестве ответа Anahaym 16 апреля 2018 г. 12:41
    16 апреля 2018 г. 11:23
    Модератор
  • ага, работает. но как дату привести здесь в номальный вид (через точки, и день на первом месте)?

    CreationTime : 04/14/2018 00:35:02
    Directory : \DC1\  223019
    Length : 10244587520
    Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx 
    
    CreationTime : 04/14/2018 04:29:19
    Directory : \VPN3\  021554
    Length : 33277607936
    Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx 
    
    CreationTime : 04/14/2018 04:00:53
    Directory : \TFS1\  233446
    Length : 384288423936
    Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx 
    
    CreationTime : 04/14/2018 01:34:33
    Directory : \SRV2\  223515
    Length : 159423397888
    Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx 
    
    CreationTime : 04/14/2018 04:15:43
    Directory : \tools\  020111
    Length : 34460401664
    Name : a19569cf-bbdc-49d2-958f-3e1ae77a23e7.vhdx 
    

    И вообще, в чём смысл цикла?

    16 апреля 2018 г. 11:56
  • смысл цыкла в том что бы избавиться от FL, перебрать ваши 5 дисков и сформировать вывод в требуемом виде.

    Дату можно привести в любой вид через Get-Date -Format или -uFormat

    Например так:

    "CreationTime : $(get-date $tmpresult.CreationTime -format u)"

    или так:

    "CreationTime : $(get-date $tmpresult.CreationTime -uformat '%d.%m.%Y %H:%M')"


    The opinion expressed by me is not an official position of Microsoft



    16 апреля 2018 г. 12:01
    Модератор
  • да, но почему визуально и файл, созданные с FL, и файл созданный циклом - одинаковые ? Т.е. для меня это выглядит как мы сформировали тоже самое. Через FL:

    Через цикл:

    16 апреля 2018 г. 12:08
  • Вывод FL зависит от размера окна

    для проверки что вы получаете разный результат можете сделать такие настройки окна

    и опять запустить 2 скрипта


    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа Anahaym 16 апреля 2018 г. 12:41
    16 апреля 2018 г. 12:27
    Модератор
  • просто зло берёт.... 50 знаков по умолчанию, что в PoSH, что в CMD.

    Со временем я уже разобрался.

    Спасибо.


    • Изменено Anahaym 16 апреля 2018 г. 12:41
    • Помечено в качестве ответа Anahaym 16 апреля 2018 г. 12:41
    • Снята пометка об ответе Anahaym 16 апреля 2018 г. 12:41
    • Помечено в качестве ответа Vector BCOModerator 16 апреля 2018 г. 12:45
    • Снята пометка об ответе Vector BCOModerator 16 апреля 2018 г. 12:45
    16 апреля 2018 г. 12:41
  • просто зло берёт.... 50 знаков по умолчанию, что в PoSH, что в CMD.

    Со временем я уже разобрался.

    Спасибо.


    такие отчеты по красоте можно строить так: https://habrahabr.ru/post/279005/



    The opinion expressed by me is not an official position of Microsoft

    16 апреля 2018 г. 12:46
    Модератор
  • для меня это сложно. но спасибо.
    16 апреля 2018 г. 12:49