Powershell 导出csv仅使用文本文件中的最后一行
我在这一行的文本文件中有两个计算机名-获取内容-路径“c:\powershell\computernames.txt”。但是,它仅将一个计算机名导出到testADcomputers.csv中Powershell 导出csv仅使用文本文件中的最后一行,powershell,csv,Powershell,Csv,我在这一行的文本文件中有两个计算机名-获取内容-路径“c:\powershell\computernames.txt”。但是,它仅将一个计算机名导出到testADcomputers.csv中 function Get-loginTest.ps1 { #[CmdletBinding()] param ( $computername = (get-content -path 'c:\powershell\computernames.txt') )
function Get-loginTest.ps1 {
#[CmdletBinding()]
param (
$computername = (get-content -path 'c:\powershell\computernames.txt')
)
[string]$ErrorLog = 'c:\powershell\useful\errorlog\retry.txt',
[switch]$LogErrors
foreach ($computer in $computername)
{
$os = Get-WmiObject Win32_OperatingSystem -computer $computer
$bios = Get-WmiObject Win32_BIOS -computer $computer
$model = Get-WmiObject Win32_ComputerSystem -computer $computer
$AD = Get-ADComputer $computer -Properties LastLogonDate
$ping = Test-Connection -quiet -computername $computer
}
$obj = New-Object -TypeName PSObject
$obj| Add-Member -MemberType NoteProperty -Name Computername -Value $computer
$obj| Add-Member -MemberType NoteProperty -Name OnlineStatus -value $ping
$obj| Add-Member -MemberType NoteProperty -Name LoggedIn -Value ($model.username)
$obj| Add-Member -MemberType NoteProperty -Name OSVersion -Value ($os.Caption)
$obj| Add-Member -MemberType NoteProperty -Name LastLogonDate -Value ($AD.LastLogonDate)
Write-Output $obj
}
Get-loginTest.ps1 | Export-Csv C:\PowerShell\TestADcomputers.csv
很简单,您只需要告诉它输出一个对象。该对象是在ForEach循环之后生成的,因此它只看到循环最后一个循环的结果。您要做的是将对象创建移动到ForEach循环中,并创建一个包含这些对象的数组。然后,一旦ForEach循环完成,就可以将其输出到CSV。此稍加修改的脚本应执行您想要的操作:
#[CmdletBinding()]
param (
$computername = (get-content -path 'c:\powershell\computernames.txt'),
[string]$ErrorLog = 'c:\powershell\useful\errorlog\retry.txt',
[switch]$LogErrors
)
[Array]$Collection = foreach ($computer in $computername){
$os = Get-WmiObject Win32_OperatingSystem -computer $computer
$bios = Get-WmiObject Win32_BIOS -computer $computer
$model = Get-WmiObject Win32_ComputerSystem -computer $computer
$AD = Get-ADComputer $computer -Properties LastLogonDate
$ping = Test-Connection -quiet -computername $computer
New-Object -TypeName PSObject -Property @{
Computername = $computer
OnlineStatus = $ping
LoggedIn = $model.username
OSVersion = $os.Caption
LastLogonDate = $AD.LastLogonDate
}
}
$Collection | Export-Csv TestADComputers.csv -NoTypeInformation
创建一个数组来存储每个自定义对象,将每个自定义对象添加到for循环中的数组中其他答案指出,
foreach
循环并没有完全包围所有必要的代码。另一种选择是取消函数中的循环,并允许函数处理管道输入。这将使您在如何使用该函数方面具有更大的灵活性
function Get-loginTest {
[CmdLetBinding()]
param (
[Parameter(ValueFromPipeline=$True)]
$computer = 'localhost'
)
process {
$os = Get-WmiObject Win32_OperatingSystem -computer $computer
$bios = Get-WmiObject Win32_BIOS -computer $computer
$model = Get-WmiObject Win32_ComputerSystem -computer $computer
$AD = Get-ADComputer $computer -Properties LastLogonDate
$ping = Test-Connection -quiet -computername $computer
$obj = New-Object -TypeName PSObject
$obj| Add-Member -MemberType NoteProperty -Name Computername -Value $computer
$obj| Add-Member -MemberType NoteProperty -Name OnlineStatus -value $ping
$obj| Add-Member -MemberType NoteProperty -Name LoggedIn -Value ($model.username)
$obj| Add-Member -MemberType NoteProperty -Name OSVersion -Value ($os.Caption)
$obj| Add-Member -MemberType NoteProperty -Name LastLogonDate -Value ($AD.LastLogonDate)
$obj
}
}
Get-loginTest workstation1|
Export-Csv C:\temp\TestADcomputers.csv
这将允许您通过管道将计算机从获取内容:
get-content -path 'c:\powershell\computernames.txt'|
Get-loginTest|
Export-Csv C:\temp\TestADcomputers.csv
或者,您可以为该功能指定一台计算机
function Get-loginTest {
[CmdLetBinding()]
param (
[Parameter(ValueFromPipeline=$True)]
$computer = 'localhost'
)
process {
$os = Get-WmiObject Win32_OperatingSystem -computer $computer
$bios = Get-WmiObject Win32_BIOS -computer $computer
$model = Get-WmiObject Win32_ComputerSystem -computer $computer
$AD = Get-ADComputer $computer -Properties LastLogonDate
$ping = Test-Connection -quiet -computername $computer
$obj = New-Object -TypeName PSObject
$obj| Add-Member -MemberType NoteProperty -Name Computername -Value $computer
$obj| Add-Member -MemberType NoteProperty -Name OnlineStatus -value $ping
$obj| Add-Member -MemberType NoteProperty -Name LoggedIn -Value ($model.username)
$obj| Add-Member -MemberType NoteProperty -Name OSVersion -Value ($os.Caption)
$obj| Add-Member -MemberType NoteProperty -Name LastLogonDate -Value ($AD.LastLogonDate)
$obj
}
}
Get-loginTest workstation1|
Export-Csv C:\temp\TestADcomputers.csv
注意,我还删除了Get Content
调用作为计算机名的默认值。对于默认值,依赖外部数据源通常不是一个好主意。改用localhost
将使该功能更加可移植/可重用。谢谢!这占用了我文本文件中的所有计算机。