2017-10-16 36 views
1

我创建了一个具有3个属性的自定义对象。属性中的数据是从Backup Exec作业日志文件中提取的。Powershell - 从自定义对象中输出多个-noteproperty到多行

$BackupServer = Get-Content C:\ITO\RB\ERRORS\STARTEND.TXT | Select-String -SimpleMatch 'Backup of "' 

$BackupStartTime = Get-Content C:\ITO\RB\ERRORS\STARTEND.TXT | Select-String -SimpleMatch 'Backup started on' 

$BackupEndTime = Get-Content C:\ITO\RB\ERRORS\STARTEND.TXT | Select-String -SimpleMatch 'Backup completed on' 

我然后创建一个客户对象,具有自定义属性

$props= [ordered]@{ ServerName = $backupserver 
        StartTime = $backupstarttime 
        EndTime = $BackupEndTime 
        Success = 'Did Backup Complete' 
        } 
$obj = New-Object -TypeName psobject -Property $props 

$objectoutput = $obj | Select @{n='Server Name';e={$_.ServerName -split ','+"`n"}}, @{n='Start Time';e={$_.StartTime -split '.'+"`n"}}, @{n='End Time';e={$_.EndTime -split '.'+"`n"}} 
$objectoutput 

数组中的数据是什么,我想,所以我很高兴至今。

Custom Object : 

$objectoutput | Get-Member 


    TypeName: Selected.System.Management.Automation.PSCustomObject 

Name  MemberType Definition                                                     
----  ---------- ----------                                                     
Equals  Method  bool Equals(System.Object obj)                                                
GetHashCode Method  int GetHashCode()                                                   
GetType  Method  type GetType()                                                    
ToString Method  string ToString()                                                   
End Time NoteProperty System.Object[] End Time=16/10/2017 at 06:04:38. 16/10/2017 at 06:04:57. 16/10/2017 at 06:05:11. 16/10/2017 at 06:05:42. 16/10/2017 at 06:08:31. 16/10/2017 at 06:09:03. 15/10/2017 at 20:07:30. 15/10/2017 at 20:09:49. ... 
Server Name NoteProperty System.Object[] Server Name=server1. 
SERVERVMWSUS SERVEROP5P01 SERVERLUDIP01 SERVERNEWMPLP04 SERVERURV2... 
**Start Time** NoteProperty System.Object[] Start Time=16/10/2017 at 06:03:08. 16/10/2017 at 06:04:55. 16/10/2017 at 06:05:07. 16/10/2017 at 06:05:36. 16/10/2017 at 06:06:19. 16/10/2017 at 06:09:00. 15/10/2017 at 20:02:36. 15/10/2017 at 20:08:23... 

当我调用数组时,我得到了这个。数据元素在那里。然而它似乎是一长串文字。

$objectoutput 
Server Name Start Time End Time                
{ITOTFXSBK01.C, ITOTFXSBK01.EFISystemPartition, ITOTFXSBK01.BKUPEXEC, ITOTFXSB... 
{16/10/2017 at 06:03:08., 16/10/2017 at 06:04:55., 16/10/2017 at 06:05:07., 16... 
{16/10/2017 at 06:04:38., 16/10/2017 at 06:04:57., 16/10/2017 at 06:05:11., 16... 

我想要的是有一个新的生产线的每个服务器,有一个可以用来分割服务器名记属性“空间”,为开始时间和结束时间有一个“”可以用来分割。

在我最后的报告中,我使用这个命令,尝试输出我怎么想,但它没有好,我已经尝试过许多不同的组合“R” n和-split和-join等

$rpt4+= Get-HtmlContentTable ($objectoutput | Select @{n='Server Name';e={$_.ServerName -split '\s+'}}) 

我的我真的很努力去解决它。我能做的最好的可以看到下面: PICTUREHERE

样本数据

$backupserver = 
TELB2BDB01 
TELCLUS01 
TELADVDB01 
TELSPDB01 
TELSQL04 

$BackupStarttime = 
16/10/2017 at 04:10:43. 
16/10/2017 at 04:12:07. 
16/10/2017 at 02:02:38. 
16/10/2017 at 02:01:02. 
16/10/2017 at 02:01:32. 

$BackupEndTime = 
16/10/2017 at 04:11:51. 
16/10/2017 at 04:13:14. 
16/10/2017 at 02:06:17. 
16/10/2017 at 02:02:10. 
16/10/2017 at 02:02:52. 
+0

你能提供,我们可以用它来创建对象我们自己和我们展示了一个输出实例你期望? –

+0

我更新了我的主要问题以进一步解释 - 谢谢。 –

+0

我们快到了。现在我们需要示例数据来处理... –

回答

1

我觉得你的主要问题是,你正在使用的-split运营商没有逃逸正则表达式的命令(如点)。

这是基于你的数据的一些工作示例:

$backupserver = "TELB2BDB01 TELCLUS01 TELADVDB01 TELSPDB01 TELSQL04" 
$BackupStarttime = "16/10/2017 at 04:10:43. 16/10/2017 at 04:12:07. 16/10/2017 at 02:02:38. 16/10/2017 at 02:01:02. 16/10/2017 at 02:01:32." 
$BackupEndTime = "16/10/2017 at 04:11:51. 16/10/2017 at 04:13:14. 16/10/2017 at 02:06:17. 16/10/2017 at 02:02:10. 16/10/2017 at 02:02:52." 

$servers = $backupserver -split ' ' 
$startTimes = $BackupStarttime -split '\.' 
$endTimes = $BackupEndTime -split '\.' 

for ($i = 1; $i -lt $servers.Count; $i++) 
{ 
    [PsCustomObject]@{ 
     ServerName = $servers[$i] 
     StartTime = $startTimes[$i] 
     EndTime = $endTimes[$i] 
     Success = 'Did Backup Complete' 
    } 
} 

输出:

ServerName StartTime    EndTime     Success    
---------- ---------    -------     -------    
TELCLUS01 16/10/2017 at 04:12:07 16/10/2017 at 04:13:14 Did Backup Complete 
TELADVDB01 16/10/2017 at 02:02:38 16/10/2017 at 02:06:17 Did Backup Complete 
TELSPDB01 16/10/2017 at 02:01:02 16/10/2017 at 02:02:10 Did Backup Complete 
TELSQL04 16/10/2017 at 02:01:32 16/10/2017 at 02:02:52 Did Backup Complete 
+0

非常感谢。这已经很好地排序我的问题。我有几个格式问题(行上有额外的空格),但我应该能够解决这个问题。 –

+0

你能解释一下这条线可以作为未来的参考:for($ i = 1; $ i -lt $ servers.Count; $ i ++)我理解这个概念,但为什么要计数? –

+1

因为这些都是简单的分割,所以你完全可以避免使用正则表达式。 '$ backupserver.Split()'和'$ BackupStarttime.split('。')'很适合这里。 – Matt

相关问题