Powershell - 变量和foreach循环

时间:2016-12-07 14:08:48

标签: windows powershell variables out-gridview

This thread让我开始很好,但现在我需要更多的帮助

我正在尝试遍历我的serverlist.txt文件,并将Get-EventLog的结果传递给Out-GridView,然后传递给.csv文件。我有这个工作,但我必须在GridView窗口中选择所有记录,然后为每个服务器单击OK。

所以,我想我想在循环外创建一个$ sys变量,进入,将结果附加到每个服务器的变量,然后退出循环并将$ sys传递给Grid-view。

我的困惑在于代码中的变量声明,类型,追加和位置......

我现在正在学习PS,所以这对你来说可能有点基础:)

此代码有效......需要在正确的位置添加变量构思:

#Drop the existing files
Remove-Item C:\system.csv

# SERVER LIST PROPERTIES
# Get computer list to check disk space. This is just a plain text file with the servers listed out.
$computers = Get-Content "C:\ServerList.txt"; 

#Declare $sys here ??

# QUERY COMPUTER SYSTEM EVENT LOG
foreach($computer in $computers)

{        
 if(Test-Connection $computer -Quiet -Count 1)
        {
   Try {
        # $sys = 
        Get-EventLog -ComputerName $computer -LogName System -EntryType "Error","Warning" -After (Get-Date).Adddays(-7) `
        | Select-Object -Property machineName, EntryType, EventID, Source, TimeGenerated, Message `
        | Out-GridView -PassThru | Export-Csv C:\System.csv -NoTypeInformation -Append;
       } 
   Catch 
       {
       Write-Verbose "Error $($error[0]) encountered when attempting to get events from  $computer"
       }
       } 
   else {
         Write-Verbose "Failed to connect to $computer"
        }


}
# $sys | Out-GridView....etc.

谢谢!

Kevin3NF

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我使用了多条评论的建议:

$ sys = @()(在循环之外)

$ sys + = Get-EventLog(在循环内)

$ sys | Export-Csv(在循环之后发送到.csv)

我甚至在博客上写了整篇文章,包括我经历过的各种学习迭代: http://dallasdbas.com/getting-to-know-powershell-from-an-old-dba/

感谢所有帮助。这给了我一个框架,我会在需要时继续在这些服务器上使用它。

Kevin3NF