2014-05-12 58 views
0

该脚本读取计算机名称的.TXT文件。然后检查Windows Update是否设置为自动或手动;计算机名称和更新类型将被导出为CSV格式。起初,它只是出口最后一台电脑,而且它是类型。我做了一些研究,看到创建一个对象来保存名称和类型,然后将该对象添加到数组中会起作用。但是,将数组导出到CSV会导致与数组相关的有趣数据,而不是计算机名称和类型。最重要的是,我在控制台预输出时打印出数组,并且它看起来是最后一台计算机及其列出的类型的9倍,计算机数量是我阅读的.TXT文件中的数量。我知道export-CSV现在有一个附加参数可以解决这个问题,但是我们在办公室里有更多的PS 1.0和2.0,并且需要它来处理这些版本。将foreach循环的结果导出到CSV

clear-host 

$item = new-object PSObject 
$list = @() 
$c=Get-Credential 
$a = gc "c:\Scripts\pcList.txt" 

ForEach ($b in $a) 
{ 
    $pcName = Get-WmiObject win32_service -filter 'name="wuauserv"' -computer $b -credential $c -ErrorAction SilentlyContinue | 
select-object name, 
@{N="System Name";E={$_.Systemname}} 
    $name = $pcName.'System Name' 
    $item | Add-Member NoteProperty Name $name -Force 

    $pcType = Get-WmiObject win32_service -filter 'name="wuauserv"' -computer $b -   credential $c -ErrorAction SilentlyContinue | 
select-object name, @{N="Startup Type";E={$_.StartMode}} 
    $type = $pcType.'Startup Type' 
    $item | Add-Member NoteProperty StartupType $type -Force  

    $list += $item 
} 
Write-Host $list 

export-csv -Path "c:\Scripts\pcListCSV" -inputobject $list -notype 

回答

2

好的,一些事情。这个剧本看起来相当不错,所有的事情都考虑到了,而且有一些小小的调整,它应该可以正常工作。让我们看看这个有点不同的东西,只是一次构建对象,而不是添加noteproperties。

另外,我们只需要1次调用GWMI(Get-WMIObject的简写)。我认为这对你会更好。首先,让GWMI调用一次意味着我们必须在做出一件事情时选择不止一件事情。既然你真的做了两次完全相同的调用,并且每次都从它中选择两个不同的东西,这种说法是有道理的。我们将跳过在select中定义事件,并让$pcName存储来自GWMI调用的所有数据。不过,首先我们要确保$pcName中没有旧数据,以确保我们不会重复。

clear-host 

$item = new-object PSObject 
$list = @() 
$c=Get-Credential 
$a = gc "c:\Scripts\pcList.txt" 

ForEach ($b in $a) 
{ 
    if(Get-Variable pcName -ea SilentlyContinue){Remove-Variable pcName} 
    $pcName = Get-WmiObject win32_service -filter 'name="wuauserv"' -computer $b -credential $c -ErrorAction SilentlyContinue 

好的,现在我们创建对象,我们直接将它添加到数组中。这里是我们将Name和StartupType等东西定义为对象属性的地方,所以当您稍后显示数组时,它会显示每个项目的这两个属性。之后,我们将关闭ForEach循环,并将列表显示在屏幕上,并将其传递给Export-CSV以保存结果。

$list += New-Object PSObject -Property @{ 
     Name = $pcName.SystemName 
     StartupType = $pcName.StartMode 
    } 
} 
$list 
$list | Export-Csv "C:\Scripts\pcList.CSV" -notype 

所以,这不检查,以确保该系统是在网上,或做任何错误检查这样的,但如果这与你OK,然后我想这应该做的正是你所需要的。

+0

完美的工作!我真的很感激这个帮助,在这一天里我一直在抨击这个问题,只是想不出这个问题。谢谢! – TeegsD