Foreach result wount save in variable?

Welcome Forums General PowerShell Q&A Foreach result wount save in variable?

Viewing 5 reply threads
  • Author
    Posts
    • #191584
      Participant
      Topics: 4
      Replies: 11
      Points: 51
      Rank: Member

      Thanks

    • #191587
      js
      Participant
      Topics: 27
      Replies: 717
      Points: 1,886
      Helping Hand
      Rank: Community Hero

      You aren't outputting anything. Usually an object array is made like this. Use the PRE button for code.

      $list = 1,2,3
      $result = foreach ($i in $list) { 
        [pscustomobject]@{num = $i
                         nextnum = $i + 1
                        }
      }
      $result
      
      
      num nextnum
      --- -------
        1       2
        2       3
        3       4
      
    • #191590
      Participant
      Topics: 4
      Replies: 11
      Points: 51
      Rank: Member

      Don't see why?

      My output shall be from the import and when I am doing foreach I want to save the result in a variable as I am trying.

      • #191596
        js
        Participant
        Topics: 27
        Replies: 717
        Points: 1,886
        Helping Hand
        Rank: Community Hero

        Assignment statements don't output anything.

        foreach ($i in 1) {
          $a = 'hi'
          $b = 'there'
          $c = 'how are you?'
        }
        
        # no output
        
    • #191593
      Participant
      Topics: 10
      Replies: 1284
      Points: 1,084
      Helping Hand
      Rank: Community Hero

      Please use PRE tags to format code. Here are two options that you can use, both are stored in the $results variable:

      #Emulate a CSV import
      $users = @()
      $users += [pscustomobject]@{FirstName = 'Jim';LastName = 'Johnson'}
      $users += [pscustomobject]@{FirstName = 'Sally';LastName = 'Smith'}
      $users += [pscustomobject]@{FirstName = 'Tommy';LastName = 'Sampson'}
      
      #Method 1 - Appending to the current object
      #Use calculated expressions to get all of the current properties of the user
      #with a Select and then add properties with the calculated expression
      
      $results = foreach ( $user in $users ) {
          $login = '{0}{1}' -f $user.FirstName.SubString(0,1), $user.LastName
      
          $user | Select *,
                         @{Name='Login';Expression={$login}},
                         @{Name='Date';Expression={Get-Date}}
      }
      
      #Method 2 - Generate a new object
      #Build a new PSObject from scratch using the [pscustomobject] accelerator
      $results = foreach ( $user in $users ) {
          $login = '{0}{1}' -f $user.FirstName.SubString(0,1), $user.LastName
      
          [pscustomobject]@{
              FirstName = $user.FirstName
              LastName  = $user.LastName
              Login     = $login
              Date      = Get-Date
          }
      }
      

      Output:

      PS C:\WINDOWS\system32> $results
      
      FirstName LastName Login    Date                
      --------- -------- -----    ----                
      Jim       Johnson  JJohnson 12/4/2019 9:36:29 AM
      Sally     Smith    SSmith   12/4/2019 9:36:29 AM
      Tommy     Sampson  TSampson 12/4/2019 9:36:29 AM
      
    • #191599
      Participant
      Topics: 4
      Replies: 11
      Points: 51
      Rank: Member

      Thanks 🙂 I have test method 2 and it works like a charm 🙂

    • #191665
      Participant
      Topics: 4
      Replies: 11
      Points: 51
      Rank: Member

      AS for the final script 🙂

      Clear-Host
      
      cd E:\automation\kuafUsers
      
      Remove-Item .\final.csv -Force
      
      #Start to calculate the day of month
      $Year = (get-date).Year
      $Month = (get-date).Month -1
      $StartOfMonth = Get-Date -Year $Year -Month $Month -Day 1
      
      #Importing and cleaning character content in rows depending on selection
      $users = Import-Csv '.\KUAF Users dates (w defgroup).csv' -Delimiter ";" -Encoding UTF8 | Where {$_.Deleted -ge ($StartOfMonth).ToString('yyyy-MM-dd') -or $_.Deleted -eq "?"}
      
      $results = foreach ( $user in $users ) {
      $login = '{0}{1}' -f $user.FirstName.SubString(0,1), $user.LastName
      [pscustomobject]@{
      ID = $user.ID
      NAME = $user.NAME -replace 'corp\\','' -replace 'dfns\\','' -replace '\(Delete\).*',''
      LASTNAME = $user.LASTNAME -replace '\(AU\).*',''
      FIRSTNAME = $user.FIRSTNAME
      TITLE = $user.TITLE
      GROUPNAME = $user.GROUPNAME
      CREATED = $user.CREATED
      DELETED = $user.DELETED
      LATEST_LOGIN = $user.LATEST_LOGIN
      }
      }
      
      $results | Export-Csv .\final.csv -Delimiter ";" -Encoding UTF8 -NoTypeInformation
      
      clear-host
      
      #Deleting selected rows depending on selection
      $csv = import-csv ".\final.csv" -Delimiter ";" -Encoding UTF8
      
      $nodelete = foreach($line in $csv){
      if(-not($line.GROUPNAME -like '*XAD-CFIS*') -and `
      (-not($line.GROUPNAME -like '*ORG-CFI*') -and `
      (-not($line.GROUPNAME -like '*XAD-P*') -and `
      (-not($line.NAME -like '*adm*') -and `
      (-not($line.NAME -like '*admin*') -and `
      (-not($line.NAME -like '*op5*'))))))){
      $line
      }
      }
      
      #Creating final Excel file
      $nodelete | select NAME, LASTNAME, FIRSTNAME `
      | sort NAME `
      | Export-Excel "E:\automation\kuafExcel\Debitering $((Get-Date).ToString('yyyy-MM')).xlsx"
      #Remove-Item ".\final.csv" -Force
      
      #Now it's time to send the result to right instance.
      Send-MailMessage -From 'mail@mail.com' `
      -To 'epost@epost.com' `
      -Subject 'Hej, Vänligen bekräfta när ni läst in data. Stort tack för hjälpen!' -Encoding "UTF8" `
      -Attachments "E:\automation\kuafExcel\Debitering $((Get-Date).ToString('yyyy-MM')).xlsx" `
      -SmtpServer 'smtp.test.com'
Viewing 5 reply threads
  • You must be logged in to reply to this topic.