如何使用Select-Object属性展开power shell命令中的所有字段

时间:2015-09-28 10:49:18

标签: powershell

Get-ChildItem -Path E:\Server_Data\data\2015 -Recurse –File -include "*.txt","*.csv" | Where-Object {$_.Name -like "*transaction*"} | Select-Object -ExpandProperty FullName,LastWriteTime

我正在尝试使用Get-ChildItemSelect-Object属性列出文件夹中的所有文件。当我尝试使用FullName变量列出完全限定的文件名时,文件名将被截断。试图使用-ExpandProperty来获取完全限定的文件名。它适用于一个字段,但如果我尝试列出FullName和LastWriteTime,它就无法正常工作。

power shell命令的输出将在MS SQL Server中用于将文件名加载到特定的表中。

请为我的目的建议正确的语法。感谢您的帮助!

6 个答案:

答案 0 :(得分:1)

如果您 要执行此操作以在控制台上显示,那么您可以查看使用Format-Table -Wrap参数来显示所有文本控制台没有截断输出。

Get-ChildItem -Path E:\Server_Data\data\2015 -Recurse –File -include "*.txt","*.csv" |Where-Object {
    $_.Name -like "*transaction*"
} | Format-Table FullName,LastWriteTime -Wrap

如果您计划对我们的输出执行任何其他操作,那么您将需要避免使用Format- * cmdlet,因为它们会向对象添加自定义格式并在管道中使其无效。

答案 1 :(得分:1)

如果您在其他程序中使用输出,则应转换为CSV,JSON或XML,而不是复制格式化的输出。也可以使用PowerShell命令直接插入SQL。

Get-ChildItem -Path E:\Server_Data\data\2015 -Recurse –File -include "*.txt","*.csv" | 
Where-Object {$_.Name -like "*transaction*"} | 
Select-Object FullName,LastWriteTime |
ConvertTo-Csv -NoTypeInformation

最后一个命令的其他选项是:

  • 带有ConvertTo-Json
  • 的JSON
  • 带有ConvertTo-xml -As String -NoTypeInformation
  • 的XML

迟到的答案,但自从PowerShell 3.0以来就已经存在,所以应该是一个选项。

答案 2 :(得分:1)

希望我不迟到。这个示例对我有用(Get-Service,具有嵌入数据“集合”的多个属性)

Get-Service |
Select-Object
Name,
Status, 

... 然后在脚本的下一行中,要扩展的下一个对象应该像这样  @{Name="CustomCol01";Expression={$_.ServicesDependedOn} },

@{Name="CustomCol02";Expression={$_.DependentService} }

在示例中,我需要扩展的2个有问题的对象是 ServicesDependedOn DependentService

是的,通过自定义新列,它可以为您扩展任何对象

即使将最终输出重定向到这样的csv,也可以进行测试 ... > myfile.csv

答案 3 :(得分:0)

根据您的用例和输入,一种方法是在管道中使用两个Select-Object cmdlet,一个用于定义属性数组,另一个用于扩展它们:

PS C:\> $Name,$DisplayName,$Status = Get-Service 
  | Select-Object -First 1 -Property @{
    Name = "MyProperties"
    Expression = { $_.Name,$_.DisplayName,$_.DisplayName }
  } | Select-Object -ExpandProperty MyProperties

答案 4 :(得分:0)

Get-ChildItem -Path E:\Server_Data\main.sweetbeam.net\data\2015 -Recurse –File -include "*.txt","*.csv" | Where-Object {$_.Name -like "*transaction*"} | Select-Object @{Name="test";Expression={$_.FullName + "`t" + $_.LastWriteTime}} | Select-Object -ExpandProperty test

合并这两个字段并将派生字段用于我的目的。

答案 5 :(得分:0)

get-eventlog Security `
    -EntryType SuccessAudit `
    -Newest 50 `
    -InstanceId 4624,4634 `
    -ComputerName $env:COMPUTERNAME |
Select-Object -Property *

OR (并非所有字段)

get-eventlog Security `
    -EntryType SuccessAudit `
    -Newest 50 `
    -InstanceId 4624,4634 `
    -ComputerName $env:COMPUTERNAME |
Select-Object -Property TimeGenerated,EventID,Message -PipelineVariable myEvent |
Foreach-Object -Process {
    convertTo-Json -InputObject @{ 
        TimeGenerated = (Get-Date $myEvent.TimeGenerated)
        EventID = $myEvent.EventID
        Message = $myEvent.Message.Substring(0, $myEvent.Message.IndexOf("`r"))
    } -Depth 1
}