2017-07-06 55 views
-1

每次通過foreach循環時,我都想捕獲變化的變量'$ server'。總而言之,$ sever值總是在變化,我想捕獲它並將其添加到一個集體csv文件中導出循環中的每個變量值

謝謝!

這裏是我有的代碼的主要部分。

function Convert-QueryToObjects 
{ 
    [CmdletBinding()] 
    [Alias('QueryToObject')] 
    [OutputType([PSCustomObject])] 
    param 
    (
    [Parameter(Mandatory = $false, 
       ValueFromPipeline = $true, 
       ValueFromPipelineByPropertyName = $true, 
       Position = 0)] 
    [Alias('ComputerName', 'Computer')] 
    [string] 
    $Name = $env:COMPUTERNAME 
) 

Process 
{ 
    Write-Verbose "Running query.exe against $Name." 
    $Users = query user /server:$Name 2>&1 

    if ($Users -like "*No User exists*") 
    { 
     # Handle no user's found returned from query. 
     # Returned: 'No User exists for *' 
     Write-Error "There were no users found on $Name : $Users" 
     Write-Verbose "There were no users found on $Name." 
    } 
    elseif ($Users -like "*Error*") 
    { 
     # Handle errored returned by query. 
     # Returned: 'Error ...<message>...' 
     Write-Error "There was an error running query against $Name : $Users" 
     Write-Verbose "There was an error running query against $Name." 
    } 
    elseif ($Users -eq $null -and $ErrorActionPreference -eq 'SilentlyContinue') 
    { 
     # Handdle null output called by -ErrorAction. 
     Write-Verbose "Error action has supressed output from query.exe. Results were null." 
    } 
    else 
    { 
     Write-Verbose "Users found on $Name. Converting output from text." 

     # Conversion logic. Handles the fact that the sessionname column may be populated or not. 
     $Users = $Users | ForEach-Object { 
      (($_.trim() -replace ">" -replace "(?m)^([A-Za-z0-9]{3,})\s+(\d{1,2}\s+\w+)", '$1 none $2' -replace "\s{2,}", "," -replace "none", $null)) 
     } | ConvertFrom-Csv 

     Write-Verbose "Generating output for $($Users.Count) users connected to $Name." 

     # Output objects. 
     foreach ($User in $Users) 
     { 
      Write-Verbose $User 
      if ($VerbosePreference -eq 'Continue') 
      { 
       # Add '| Out-Host' if -Verbose is tripped. 
       [PSCustomObject]@{ 
        ComputerName = $Name 
        Username = $User.USERNAME 
        SessionState = $User.STATE.Replace("Disc", "Disconnected") 
        SessionType = $($User.SESSIONNAME -Replace '#', '' -Replace "[0-9]+", "") 

       } | Out-Host 
      } 
      else 
      { 
       # Standard output. 
       [PSCustomObject]@{ 
        ComputerName = $Name 
        Username = $User.USERNAME 
        SessionState = $User.STATE.Replace("Disc", "Disconnected") 
        SessionType = $($User.SESSIONNAME -Replace '#', '' -Replace "[0-9]+", "") 

       } 
      } 
     } 
    } 
} 
} 








$Servers = Get-Content 'H:\demo\computernames.txt' 

foreach ($Server in $Servers) 
{ 
if (-not(Test-Connection $Server -Count 1 -Quiet)) { continue } 

if (-not(Convert-QueryToObjects $Server -ErrorAction SilentlyContinue)) { 



     $server | Out-File 'H:\demo\session\run1.csv' -Append 


    } 
else 
{ 
    Convert-QueryToObjects -Name $Server | select ComputerName, Username, Sessionstate, IdleTime, ID | Export-Csv 'H:\demo\session\run.csv' -NoTypeInformation 
} 
} 
+0

目的是什麼?創建一個包含計算機名稱的CSV文件,以及它們是否響應了ping? –

+0

@Bill_Stewart這樣做的目的是獲取沒有任何用戶登錄的計算機列表。 – russell

+0

@ ruslive109:請直接通過澄清更新您的問題,不要使用評論。此外,這是很多代碼,我們不知道,具體來說,問題在哪裏。考慮提供[MCVE(最小,完整和可驗證示例)](http://stackoverflow.com/help/mcve)。 – mklement0

回答

0

在你的foreach循環之外創建一個數組,並在你的foreach期間向數組添加$ server變量值。最後將數組導出到csv。

+0

有一件事會是一個問題,就是你沒有在'Export-CSV' cmdlet上使用'-Append'。該文件將繼續被覆蓋。這是你遇到的問題嗎? –

+0

是的,該文件自我覆蓋。 – russell

+0

將'-Append'添加到'Export-Csv'H:\ demo \ session \ run1.csv''所以像這樣:'Export-Csv'H:\ demo \ session \ run1.csv'-Append' –

0

沒有測試,但你想要做這樣的事情嗎?

Get-Content "H:\demo\computernames.txt" | ForEach-Object { 
    $computerName = $_ 
    if (Test-Connection $computerName -Count 1 -Quiet) { 
    Convert-QueryToObjects $computerName -ErrorAction SilentlyContinue 
    } 
    else { 
    "$_ not pingable" | Out-File "H:\demo\session\notpingable.log" -Append 
    } 
} | Export-Csv "H:\demo\session\run.csv" -NoTypeInformation 
+0

是的。我在更新的問題中添加了完整的腳本。 – russell