[POWERSHELL] Read-Host priority

Welcome Forums General PowerShell Q&A [POWERSHELL] Read-Host priority

Viewing 8 reply threads
  • Author
    Posts
    • #231049
      Participant
      Topics: 3
      Replies: 7
      Points: 37
      Rank: Member

      Hello,

      I have one question because i don’t understand why.

      I have realized an array like this :

      $table [email protected]([pscustomobject]@{Commentaire = ''})
      $path = c:\test\test.txt
      $Data = Get-Content -Path $path
      $comment = $Data[0].Split("`r")

      $table[0].Commentaire = $comment
      $table 

      and the display is like this :

      Commentaire

      <hr />

      contents of the .txt

      second content of .txt

       

      But when after the code above I add this ligne : Read-Host “Something”

      when i start the script my table don’t appear and when I remove Read-host

      that works perfectly I don’t know why have you an idea ? thanks you

    • #231085
      Participant
      Topics: 12
      Replies: 1643
      Points: 2,665
      Helping Hand
      Rank: Community Hero

      Are you trying to display a comment before the Read-Host?

      $table =[pscustomobject]@{Commentaire = 'This is my content'}
      
      $table.Commentaire
      Read-Host "What is up?"
      

      Output:

      This is my content
      What is up?: The sky
      The sky
      

      Or you can additionally concatenate the string with line breaks:

      Read-Host ("{0}rnrnWhat is up?" -f $table.Commentaire)
      
      This is my content
      
      What is up?: The moon
      The moon
      
    • #231097
      Participant
      Topics: 3
      Replies: 7
      Points: 37
      Rank: Member

      Are you trying to display a comment before the Read-Host?

      PowerShell
      5 lines

      <textarea class=”ace_text-input” style=”opacity: 0; height: 18px; width: 6.59781px; left: 44px; top: 0px;” spellcheck=”false” wrap=”off”></textarea>

      1
      2
      3
      4
      5
      $table =[pscustomobject]@{Commentaire = ‘This is my content’}
      $table.Commentaire
      Read-Host “What is up?”
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      Output:

      PowerShell
      4 lines

      <textarea class=”ace_text-input” style=”opacity: 0; height: 18px; width: 6.59781px; left: 44px; top: 0px;” spellcheck=”false” wrap=”off”></textarea>

      1
      2
      3
      4
      This is my content
      What is up?: The sky
      The sky
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      Or you can additionally concatenate the string with line breaks:

      PowerShell
      7 lines

      <textarea class=”ace_text-input” style=”opacity: 0; height: 18px; width: 6.59781px; left: 44px; top: 0px;” spellcheck=”false” wrap=”off”></textarea>

      1
      2
      3
      4
      5
      6
      7
      Read-Host (“{0}rnrnWhat is up?” -f $table.Commentaire)
      This is my content
      What is up?: The moon
      The moon
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      I’m trying to display the comment in a file .txt in my array like this picture ( random pic on google) :

      But my comment is put instead of User1, User2….

       

      I tried to put my code before the read-Host but it pass in first i don’t know why.

      The last solution that you propose don’t correspond for what I want because i want to display $Table before read-Host so i can’t concatenateI think

      • This reply was modified 1 month, 1 week ago by Noyha56.
      • This reply was modified 1 month, 1 week ago by Noyha56.
    • #231169
      Participant
      Topics: 3
      Replies: 421
      Points: 1,479
      Helping Hand
      Rank: Community Hero

      I think perhaps it is something similar to write-host. Write-host goes directly to the console, which can make it show up before other write-output commands that were executed long before write-host. Take this example

      write-output (get-date | select * | gm)
      write-host "test"
      

      When the command write-output is called, it takes a split second to calculate the output. Therefore the actual output shows up reverse of the order one might expect.

      test
      
         TypeName: Selected.System.DateTime
      
      Name        MemberType   Definition                                             
      ----        ----------   ----------                                             
      Equals      Method       bool Equals(System.Object obj)                         
      GetHashCode Method       int GetHashCode()                                      
      GetType     Method       type GetType()                                         
      ToString    Method       string ToString()                                      
      Date        NoteProperty datetime Date=2020-05-26 12:00:00 AM                   
      DateTime    NoteProperty System.String DateTime=Tuesday, May 26, 2020 2:27:37 PM
      Day         NoteProperty int Day=26                                             
      DayOfWeek   NoteProperty DayOfWeek DayOfWeek=Tuesday                            
      DayOfYear   NoteProperty int DayOfYear=147                                      
      DisplayHint NoteProperty DisplayHintType DisplayHint=DateTime                   
      Hour        NoteProperty int Hour=14                                            
      Kind        NoteProperty DateTimeKind Kind=Local                                
      Millisecond NoteProperty int Millisecond=886                                    
      Minute      NoteProperty int Minute=27                                          
      Month       NoteProperty int Month=5                                            
      Second      NoteProperty int Second=37                                          
      Ticks       NoteProperty long Ticks=637261000578866934                          
      TimeOfDay   NoteProperty timespan TimeOfDay=14:27:37.8866934                    
      Year        NoteProperty int Year=2020 

      As opposed to this

      write-output (get-date)
      write-host "test"
      
      Tuesday, May 26, 2020 2:32:24 PM
      test
      

      If this is the case, perhaps you can assign it to a variable and then output it when you’re ready. (just remember write-host nuance)

      $userinput = Read-Host -Prompt "Enter some input"
      write-host $userinput
      
    • #231178
      Participant
      Topics: 3
      Replies: 7
      Points: 37
      Rank: Member

      I think perhaps it is something similar to write-host. Write-host goes directly to the console, which can make it show up before other write-output commands that were executed long before write-host. Take this example

      PowerShell
      3 lines

       

      1
      2
      3
      write-output (get-date | select * | gm)
      write-host “test”
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      When the command write-output is called, it takes a split second to calculate the output. Therefore the actual output shows up reverse of the order one might expect.

      PowerShell
      25 lines

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      test
      TypeName: Selected.System.DateTime
      Name MemberType Definition
      —- ———- ———-
      Equals Method bool Equals(System.Object obj)
      GetHashCode Method int GetHashCode()
      GetType Method type GetType()
      ToString Method string ToString()
      Date NoteProperty datetime Date=2020-05-26 12:00:00 AM
      DateTime NoteProperty System.String DateTime=Tuesday, May 26, 2020 2:27:37 PM
      Day NoteProperty int Day=26
      DayOfWeek NoteProperty DayOfWeek DayOfWeek=Tuesday
      DayOfYear NoteProperty int DayOfYear=147
      DisplayHint NoteProperty DisplayHintType DisplayHint=DateTime
      Hour NoteProperty int Hour=14
      Kind NoteProperty DateTimeKind Kind=Local
      Millisecond NoteProperty int Millisecond=886
      Minute NoteProperty int Minute=27
      Month NoteProperty int Month=5
      Second NoteProperty int Second=37
      Ticks NoteProperty long Ticks=637261000578866934
      TimeOfDay NoteProperty timespan TimeOfDay=14:27:37.8866934
      Year NoteProperty int Year=2020
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      As opposed to this

      PowerShell
      6 lines

       

      1
      2
      3
      4
      5
      6
      write-output (get-date)
      write-host “test”
      Tuesday, May 26, 2020 2:32:24 PM
      test
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      If this is the case, perhaps you can assign it to a variable and then output it when you’re ready. (just remember write-host nuance)

      PowerShell
      3 lines

       

      1
      2
      3
      $userinput = Read-Host Prompt “Enter some input”
      write-host $userinput
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      Yes that is exactly the problem the Read-Host is realized before my Table but when I enter any character when the Read-Host ask i Have in first what I have typing when the Read-Host asking me and in the second my table that is exactly the exemple that you give with Write-Host.

      But I tried to do :

      $choice = Read-Host -Prompt “test verify display :”

      Write-Host $choice

      But that doesn’t fix the problem like you said there is always the nuance

       

    • #231205
      Participant
      Topics: 3
      Replies: 421
      Points: 1,479
      Helping Hand
      Rank: Community Hero

      Do write-information or write-verbose instead of write-host

    • #231274
      Participant
      Topics: 3
      Replies: 7
      Points: 37
      Rank: Member

      Do write-information or write-verbose instead of write-host

      I tried the two of them but no one work there is no way to resolve it or we can’t use a similar fonction of Read-Host ?

    • #231277
      Participant
      Topics: 3
      Replies: 421
      Points: 1,479
      Helping Hand
      Rank: Community Hero

      Try write-output then. It may clutter your output.

    • #231289
      Participant
      Topics: 3
      Replies: 7
      Points: 37
      Rank: Member

      I just tried and that doesn’t work too the display is always after the read-Host

       

      EDIT : I found a way to bypass the problem I have added another Read-Host before the first that doesn’t resolve the problem but that allow to bypass it.

      • This reply was modified 1 month, 1 week ago by Noyha56.
Viewing 8 reply threads
  • You must be logged in to reply to this topic.