8 Replies Latest reply on Sep 19, 2013 11:17 AM by DZ1

    New line `n is not working

    DZ1 Hot Shot

      I'm writing a small file out to a log, and it will hold the names of multiple VMs.  I want to make sure that I put the date with the VM names, and then I want a new line for each VM.  I tried something like this:

       

      ("$(Get-date -format MM-dd-yy) `r `n" + "$Removed") | Out-File c:\Scripts\test.txt -Append

       

      The date shows, and at first I was only using `n for the new line, and then I tried `r and `n, but everything gets put on one line, and then spaced apart, like this:

       

      09-12-13   VMname VMname

       

      I'm sure I'm missing something simple, but why isn't the new line appearing? 

        • 1. Re: New line `n is not working
          LucD Guru
          vExpertCommunity WarriorsUser Moderators

          You seem to have a blank between the `r and the `n, try like this

          ("$(Get-date -format MM-dd-yy) `r`n" + "$Removed") | Out-File c:\Scripts\test.txt -Append
          Blog: http://lucd.info | Twitter: @LucD22 | PowerCLI Reference co-author: http://tinyurl.com/hkn4glz
          • 2. Re: New line `n is not working
            DZ1 Hot Shot

            lol, wow, I can't believe how easy that was (for you).  I would have been working on that all day.  Well, that works, but I have 1 last question, and maybe this is because it's a text file, I'm not sure. When I email the list, each VM is on its own line, but in the text file, now it shows the date, and then it drops to a new line, but then the VM names are all on one line.  I want a VM name on each line. 

             

            -Body "Removed: `n `n $($Removed| out-string)  "

             

            Of course there is more to the line above, but I tested it and it outputs every VM on its own line (at least in the email that gets sent out), and the space does not matter, which is odd, or maybe outlook is doing something.  I include the date in the subject of the email, so I don't worry using Get-Date with the email output, but that does not work in the text file.  How do I put each VM on a new line?

            • 3. Re: New line `n is not working
              LucD Guru
              Community WarriorsvExpertUser Moderators

              If you could show me how you compiled the content of the $Removed variable ?

              Blog: http://lucd.info | Twitter: @LucD22 | PowerCLI Reference co-author: http://tinyurl.com/hkn4glz
              • 4. Re: New line `n is not working
                DZ1 Hot Shot

                if ( (Get-PSSnapin -Name VMware.VimAutomation.Core) -eq $null ) {

                  Add-PSSnapin -Name VMware.VimAutomation.Core

                }

                 

                 

                $cred = Get-VICredentialStoreItem -File c:\Scripts\cred.xml

                Connect-VIServer "1.1.1.1" -User $cred.user -Password $cred.password

                 

                 

                $today = Get-Date

                $Removed = @()

                $NotRemoved = @()

                Get-VM | where {$_.name -cmatch "Delete_\d\d\.\d\d\.\d\d"} | foreach {

                 

                 

                [datetime]$dt=($_.name.Split("_",2)[1])

                 

                 

                if ($dt.Month -eq $today.Month -and $dt.Day -eq $today.Day -and $dt.Year -eq $today.Year) {

                 

                 

                $Removed += $_.name

                $Removed | Out-File C:\Scripts\deleted.txt -Append #this is new, and it does not work

                Remove-VM -VM -DeletePermanently $_ -Confirm:$false

                 

                 

                }

                else

                {

                $NotRemoved += $_.name

                 

                 

                }

                 

                 

                }

                (Send-MailMessage -SmtpServer '1.2.3.4' -From "<m@a.com>" -To "<m@acom>" -Subject VMs -Body "VMs that have been deleted: `n `n $($NotRemoved | out-string)")

                (Send-MailMessage -SmtpServer '1.2.3.4' -From "<@com>" -To "<@a.com>" -Subject VMs -Body "VMs that are/were scheduled to be deleted, but the dates don't match: `n `n $($Removed | out-string)")

                 

                 

                Disconnect-VIServer * -Confirm:$false

                 

                Thanks, this is the script, and you helped me with the split on the date and converting it, so thanks for that .  I tested this out, and the emails come out just fine, and then I decided to add the txt file log to save the dates long term for VMs that are deleted.  This script does not include the new part where I was saving the text file, this is the script that I was initially going to run, and then I decided to add on to it.

                • 5. Re: New line `n is not working
                  LucD Guru
                  Community WarriorsvExpertUser Moderators

                  Shouldn't that line be

                  $_.Name | Out-File C:\Scripts\deleted.txt -Append #this is new, and it does not work

                  Otherwise you will append the complete array $Removed each time.

                  An alternative is to move that line outside the Get-VM loop, and then remove the Append switch

                  Blog: http://lucd.info | Twitter: @LucD22 | PowerCLI Reference co-author: http://tinyurl.com/hkn4glz
                  • 6. Re: New line `n is not working
                    DZ1 Hot Shot

                    Thanks for all the help so far, I can't get this one part to work, but here is the script so far:

                     

                     

                     

                    <#

                    if ( (Get-PSSnapin -Name VMware.VimAutomation.Core) -eq $null ) {

                      Add-PSSnapin -Name VMware.VimAutomation.Core

                    }

                     

                    $cred = Get-VICredentialStoreItem -File c:\Scripts\cred.xml

                    Connect-VIServer 1 -User $cred.user -Password $cred.password

                    #>

                    $today = Get-Date

                    $Removed = @()

                    $NotRemoved = @()

                    Get-VM | where {$_.name -cmatch "Delete_\d\d\.\d\d\.\d\d"} | foreach {

                     

                    [datetime]$dt=($_.name.Split("_",2)[1])

                     

                    if ($dt.Month -eq $today.Month -and $dt.Day -eq $today.Day -and $dt.Year -eq $today.Year) {

                     

                     

                    $Removed += $_.name

                    #("$(Get-date -format MM-dd-yy)") + "`n" + "$Removed" | Out-File C:\Scripts\deleted.txt -Append

                    #Remove-VM -VM $_ -DeletePermanently $_ -Confirm:$false

                     

                    }

                    else

                    {

                    $NotRemoved += $_.name

                    }

                     

                    }

                     

                    ("$(Get-date -format MM-dd-yy)") + "`r`n" + "$Removed" | Out-File C:\Scripts\deleted.txt -Append

                     

                    (Send-MailMessage -SmtpServer '1' -From "<>" -To "<>" -Subject VMs -Body "VMs that have been deleted:`n`n $($Removed | out-string)")

                    (Send-MailMessage -SmtpServer '1' -From "<>" -To "<>" -Subject VMs -Body "VMs that are/were scheduled to be deleted, but the dates don't match:`n`n $($NotRemoved | out-string)")

                     

                     

                    #Disconnect-VIServer * -Confirm:$false

                     

                    The section in red is my problem still, I have been playing with it, trying to change it up, but it won't output correctly.  If I leave off the date, the contents of the variable $Removed will show on their own line in the text file, but adding the date will show the date, and then it will drop down to a new line, but then each VM is put on the same line. 

                     

                    Date

                    VMname VMname

                     

                    Of course, I want this:

                     

                    Date

                    VMname

                    VMname

                     

                    And thanks again, I did have the output inside the foreach, so I moved it accordingly.  Thanks for all your help. 

                    • 7. Re: New line `n is not working
                      LucD Guru
                      Community WarriorsvExpertUser Moderators

                      Try changing that line into

                       

                      ("$(Get-date -format MM-dd-yy)") + "`r`n" + ($Removed | out-string) | Out-File C:\deleted.txt -Append
                      Blog: http://lucd.info | Twitter: @LucD22 | PowerCLI Reference co-author: http://tinyurl.com/hkn4glz
                      • 8. Re: New line `n is not working
                        DZ1 Hot Shot

                        Can you be any smarter?  I really appreciate all of your help, that worked perfectly.  I was going to try an alternate method below:

                        ("$(Get-date -format MM-dd-yy)") + "`r`n`n" + $Removed -split " "

                         

                        Of course, yours works much better since there could have been a rename issue of a VM that included a space.  Thank you so much, all I can offer you is to purchase your next book when it's available.  Many thanks.