【问题标题】:How to extract properties from a powershell object如何从powershell对象中提取属性
【发布时间】:2021-06-17 08:37:33
【问题描述】:

我正在尝试从 Powershell 中的 Get-ChildItem 获得的结果中提取对象的属性,如下所示

$folderPath = "C:\Users\me\someThing1\someThing2"
$fileNames = Get-ChildItem  -Path $folderPath -Filter *.pdf -recurse | ForEach-Object { 
    $_.FullName  
    $_.LastWriteTime
    $_.Exists
    $_.BaseName
    $_.Extension
}
# Extracting properties
foreach ($file in $fileNames) {
    Write-Host $file
  
}

当我使用 Write-Host 命令时,我将 FullName、LastWriteTime、Exists、BaseName、Extension 的属性值打印到每个文件的终端。但我无法获得个人财产价值。

例如,我尝试过

Write-Host $file."BaseName"

它不起作用。有人可以帮我从每个文件中提取单个属性吗? 目的是将每个文件的每个属性存储到一个数组中,如下所示

$FullNames = @()
$LastWriteTimes  = @()
$Exists = @()
$BaseNames  = @()
$Extensions  = @()

【问题讨论】:

  • 完全移除 ForEach-Object
  • 是的。您也不需要在每个数组上保存每个属性。即:在您执行$fileNames = Get-ChildItem -Path $folderPath -Filter *.pdf -recurse 之后,您所有文件的“全名”将在这里$fileNames.FullName,“lastWriteTime”将在这里$fileNames.lastWriteTime 等等。
  • 这两个是正确的。此外,即使在这种情况下不需要它,您也应该在保存输出时尝试切换到 [System.Collections.ArrayList] 而不是固定数组。
  • 另外,Write-Host 几乎总是不好用。如果您想将属性投射到您的 PS 主机,您可以在您的 foreach 循环中执行 $file.BaseName,或者如果您需要一个字符串,您可以执行 "Base Name: {0}" -f $file.BaseName"Base Name: $($file.BaseName)"
  • 谢谢大家。你帮了大忙!

标签: arrays powershell object get-childitem


【解决方案1】:

只是发布将属性提取到单个数组中的修改后的代码,以便其他人可能会发现它有帮助。感谢所有支持的人。

# Edit the Folder Path as desired
$folderPath = "C:\Users\me\someThing1\someThing2"

# Getting File Objects
$files = Get-ChildItem  -Path $folderPath -recurse 
   

# Extracting properties into individual Arrays
$FullNames = $files.FullName
$LastWriteTimes = $files.LastWriteTime
$file_Exists = $files.Exists
$BaseNames = $files.BaseName
$Extensions = $files.Extension

【讨论】:

  • 不需要 foreach 循环或声明这些数组。试试$FullNames = $files.FullName 看看你自己:)
  • 酷。我从来不知道从 powershell 获取信息是如此容易!再次感谢。我也通过简化来更新答案。
  • 是的,PS 就像带有辅助轮子的 Python。
  • 您甚至不需要将它们提取到单独的数组中。只需使用 $files 对象的属性作为数组
  • 被称为member enumeration
猜你喜欢
  • 1970-01-01
  • 2016-11-21
  • 2015-02-21
  • 2020-07-27
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多