Powershell Export-Csv 给出了不想要的结果

Posted

技术标签:

【中文标题】Powershell Export-Csv 给出了不想要的结果【英文标题】:Powershell Export-Csv gives undesired result 【发布时间】:2016-01-20 19:32:26 【问题描述】:

您好,我希望你们能帮助我解决困扰我几天的问题。 当我将脚本的结果导出到 csv 文件时,我无法获得正确的输出,我得到以下内容。

我所见

我想看什么

函数 Get-ScheduledTask [CmdletBinding()] 参数( [范围( 强制=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [字符串[]]$计算机名, [参数(强制=$false)] [字符串[]]$RunAsUser, [参数(强制=$false)] [字符串[]]$任务名称, [参数(强制=$false)] [别名(“WS”)] [开关]$WithSpace ) 开始 $Script:任务 = @() 过程 $schtask = schtasks.exe /query /s $ComputerName /V /FO CSV | ConvertFrom-CSV Write-Verbose “从 $ComputerName 获取计划任务” 如果 ($schtask) foreach($schtask 中的 $sch) if ($sch."Run As User" -match "$($RunAsUser)" -and $sch.TaskName -match "$($TaskName)") Write-Verbose "$Computername ($sch.TaskName).replace('\','') $sch.'Run As User'" $sch | Get-Member -MemberType 属性 | ForEach -Begin $hash=@ -Process 如果 ($WithSpace) ($hash.($_.Name)) = $sch.($_.Name) 别的 ($hash.($($_.Name).replace(" ","))) = $sch.($_.Name) -结尾 $script:Tasks += (New-Object -TypeName PSObject -Property $hash) 结尾 $Script:任务 $ComputerName = "SE94ABH02" $ServiceAccounts = 获取内容“D:\Scripts\Test-Peter\Testing\ServiceAccounts.txt” $obj = New-Object –TypeName PSObject $obj | Add-Member -MemberType NoteProperty -Name ServerName -Value $ComputerName $obj | Add-Member -MemberType NoteProperty -Name TaskName -Value ([string]::Join(",",(@()))) $obj | Add-Member -MemberType NoteProperty -Name ScheduledTaskState -Value ([string]::Join(",",(@()))) $obj | Add-Member -MemberType NoteProperty -Name LogonMode -Value ([string]::Join(",",(@()))) $obj | Add-Member -MemberType NoteProperty -Name Author -Value ([string]::Join(",",(@()))) $obj | Add-Member -MemberType NoteProperty -Name RunAsUser -Value ([string]::Join(",",(@()))) $obj | Add-Member -MemberType NoteProperty -Name ServiceName -Value ([string]::Join(",",(@()))) $obj | Add-Member -MemberType NoteProperty -Name StartName -Value ([string]::Join(",",(@()))) $SCHTSk = 获取计划任务 $ComputerName | Where-Object $_.RunAsUser -like "NLKVKF94*" |选择任务名称、计划任务状态、登录模式、作者、RunAsUser 如果($SCHTSK) $TEMP = @() foreach ($SCHTSK 中的 $TskItem) 如果 ($TskItem -match "NLKVKF94") $TEMP += $TskItem $信息=@ '任务名称'=$TEMP.任务名称; 'ScheduledTaskState'=$TEMP.ScheduledTaskState; 'LogonMode'=$TEMP.LogonMode; '作者'=$TEMP.Author; 'RunAsUser'=$TEMP.RunAsUser $tskobj = 新对象 -TypeName PSObject -Property $info $obj.TaskName += $tskobj.TaskName $obj.ScheduledTaskState += $tskobj.ScheduledTaskState $obj.LogonMode += $tskobj.LogonMode $obj.Author += $tskobj.Author $obj.RunAsUser += $tskobj.RunAsUser $WmiObjectResultaat = Get-WmiObject -Class win32_service -computer $ComputerName |选择对象 __SERVER,Name,StartName 如果($WmiObjectResultaat) $TEMP = @() foreach($WmiObjectResultaat 中的 $item) if ($ServiceAccounts - 包含 $Item.StartName) $TEMP += $项目 $信息=@ '名称'=$TEMP.Name; '开始名'=$TEMP.开始名 $Srvobj = New-Object -TypeName PSObject -Property $info $obj.ServiceName += $Srvobj.Name $obj.StartName += $Srvobj.Startname $obj | Export-Csv -Path "D:\Scripts\Test-Peter\Testing\lalala.csv" -NoTypeInformation

【问题讨论】:

如果您使用的是 Powershell,您可能需要查看 Windows 附带的 the ScheduledTasks module。 【参考方案1】:

您创建了一个对象 $obj 来保存所有任务详细信息,而不是单个任务的集合:

$obj = New-Object –TypeName PSObject
$obj | Add-Member -MemberType NoteProperty -Name ServerName -Value $ComputerName
$obj | Add-Member -MemberType NoteProperty -Name TaskName -Value ([string]::Join(",",(@())))
# ... and so on

同样,不是将单个任务添加到数组/集合中,而是将每个属性的值添加到 $obj 的同一属性中:

$tskobj = New-Object -TypeName PSObject -Property $info 
$obj.TaskName += $tskobj.TaskName
$obj.ScheduledTaskState += $tskobj.ScheduledTaskState
$obj.LogonMode += $tskobj.LogonMode
$obj.Author += $tskobj.Author
$obj.RunAsUser += $tskobj.RunAsUser

您需要做的就是将$obj 更改为一个空集合并将任务分配给它:

$obj = @()

foreach($Task in (Get-ScheduledTask))
    $TaskProperties = @
        'TaskName'=$Task.TaskName;
        'ScheduledTaskState'=$Task.ScheduledTaskState;
        'LogonMode'=$Task.LogonMode;
        'Author'=$Task.Author;
        'RunAsUser'=$Task.RunAsUser
    
    $obj += New-Object psobject -Property $TaskProperties


$obj | Export-Csv "output.csv"

【讨论】:

感谢您的解释。试过了,当然可以了。但是我如何在 csv 文件的下一个 kolom 中获得第二个命令的输出?现在 Export-Csv 将其放在下一行。我尝试使用新的哈希表并将输出添加到$obj,但这不起作用。我希望你能帮我解决这个问题

以上是关于Powershell Export-Csv 给出了不想要的结果的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell Export-Csv 导出与导入CSV文件

使用 Export-CSV 将 sqlplus 查询结果导出到 CSV

Powershell System.Array 到 CSV 文件

python在powershell中运行脚本给出'非utf'错误[重复]

powershell 该脚本查找符合特定条件的列表名称并回收列表。由于数组初始化i,这将给出null

需要Powershell脚本帮助