【问题标题】:Powershell Export-Csv gives undesired resultPowershell Export-Csv 给出了不想要的结果
【发布时间】: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

【问题讨论】:

标签: csv powershell tostring


【解决方案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,但这不起作用。我希望你能帮我解决这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2017-01-05
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多