Find Line In Text File And Turn Into Variable

Welcome Forums General PowerShell Q&A Find Line In Text File And Turn Into Variable

This topic contains 5 replies, has 3 voices, and was last updated by

 
Participant
1 year, 7 months ago.

  • Author
    Posts
  • #69037

    Participant
    Points: 0
    Rank: Member

    Admitted newbie. I feel like this should be an easy one, and am certain I've even done this before, but in digging through the few scripts I've created, I can't find it...

    I have a file called web.config at \\hostname\C$\Folder\Subfolder\Web.config. I need to find a specific line containing the string "license.log" and turn that one line into a variable. I know how to do it if I know what specific line number it's on, but this file can have different variations, so that line number can be different on any system.

    I also need to be able to split the new variable when I get that far, so any tricks that need to be used to make that happen, I'll need help in adding that to my arsenal as well... I know how to split, but in case there's something specific I need when splitting from the text file, please say so!

     
    #so far I've tried
    
    $WC = gc "\\hostname\C$\Folder\Subfolder\Web.config" | select=string "*license.log*"
    
    #and
    
    $WC = gc "\\hostname\C$\Folder\Subfolder\Web.config" | -line -like "*license.log*"
    
    #try not to laugh - I admittedly just started working with PowerShell last week :)
    
  • #69040

    Participant
    Points: 324
    Helping Hand
    Rank: Contributor

    Get-Content returns an array of lines, so you need to do a foreach to check each line for your string. Using a example web.config, you can do something like this:

    $webConfig = Get-Content .\Desktop\web.config
    
    foreach ($line in $webConfig) {
        if ($line -like '*authentication mode=*') {
            [regex]::match($line,'"(.*?)"').value
        }
    }
    

    Output:

    "Windows"
    

    However, a web.config is XML, so it's a bit easier to parse it as XML:

    [xml]$webConfig = Get-Content .\Desktop\web.config
    
    $authMode = $webConfig.configuration.'system.web'.authentication.mode
    
    "Authentication Mode: {0}" -f $authMode
    

    Output:

    Authentication Mode: Windows
    

    An additional note, your Select-String has an equal sign vs a –

  • #69042

    Participant
    Points: 263
    Helping Hand
    Rank: Contributor

    This might guide you to the right direction

    Select-String -Pattern 'license.log' -SimpleMatch -Path '\\hostname\C$\Folder\Subfolder\Web.config' | Select-Object *
  • #69058

    Participant
    Points: 0
    Rank: Member

    Thanks to both of you! Rob Simmer's first one worked fine. I couldn't get the second one to work... Apparently I'm into doing it the more difficult way...

    • #69076

      Participant
      Points: 263
      Helping Hand
      Rank: Contributor

      You might start with learning the basics of Powershell. This way you would understand better how to modify the examples to your special needs. Here are some good starting points:

      Beginner Sites and Tutorials

    • #69082

      Participant
      Points: 0
      Rank: Member

      Thanks. I've gone through the "Getting Started with Microsoft Powershell" through the Microsoft Virtual Academy. I've used the knowledge from that and a few questions in between to get a ton done in the last week... And I have every intention of doing more, but the boss put me on a project that he wants done asap.. Just one more piece to the puzzle and it's done... Then I can start studying more. And in reference to my other post and not posting my work – it's because everything I saw made absolutely no sense, so I really had nothing to show... My script is about a mile long, but that piece has stumped me. Once I'm done with lunch I'll try your suggestion – that's the last piece of the puzzle. Thanks for the input, I greatly appreciate it.

The topic ‘Find Line In Text File And Turn Into Variable’ is closed to new replies.