gpt4 book ai didi

powershell - 在PowerShell中非破坏性地编辑对象

转载 作者:行者123 更新时间:2023-12-03 00:28:04 25 4
gpt4 key购买 nike

我试图格式化结果对象而不破坏它。但是我所有的努力和研究都使我失败。欢迎任何提示。

我的代码如下所示:

Set-Location 'C:\Temp'
$Files = Get-ChildItem -File | Select-Object FullName, Length

我得到的是:
FullName                       Length
-------- ------
C:\Temp\CleanupScript.txt 10600
C:\Temp\Columns.csv 4214
C:\Temp\Content.html 271034
C:\Temp\Content.txt 271034
C:\Temp\DirSizes.csv 78

我想要的是:
FullName                       Length
-------- ------
Temp\CleanupScript.txt 10600
Temp\Columns.csv 4214
Temp\Content.html 271034
Temp\Content.txt 271034
Temp\DirSizes.csv 78

当我尝试这个:
$Files = Get-ChildItem -File | Select-Object FullName, Length | % { $_.FullName.Remove(0, 3) }

我得到了正确的结果,但是丢失了“长度”列。
PS C:\Temp> $Files
Temp\CleanupScript.txt
Temp\Columns.csv
Temp\Content.html
Temp\Content.txt
Temp\DirSizes.csv

请帮忙。

非常感谢
帕特里克

最佳答案

最简单的方法是在Select命令中构造所需的属性,例如:

$Files = Get-ChildItem -File | Select @{l='FullName';e={$_.FullName.Substring(3)}},Length

其格式是带有两个条目的哈希表。键是标签(或名称)和表达式。您可以将它们缩短为l(或n)和e。标签条目定义了您正在构造的属性的名称,表达式则定义了值。

如果要保留对象的所有原始方法和属性,则应向它们添加属性,而不要使用计算出的属性。您可以这样使用 Add-Member来做到这一点:
$Files = GCI -File | %{Add-Member -inputobject $_ -notepropertyname 'ShortPath' -notepropertyvalue $_.FullName.Substring(3) -PassThru}

然后,您可以按名称使用该属性(例如 $Files | FT ShortPath,Length -Auto),同时仍然保留使用文件方法(例如 Copy())和不使用该方法的能力。

关于powershell - 在PowerShell中非破坏性地编辑对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48409104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com