【问题标题】:How to convert an object to a string?如何将对象转换为字符串?
【发布时间】:2020-06-01 15:16:47
【问题描述】:

我想指定当前目录的名称来构造一个并行目录的路径(运行一些diff命令)。

但是当我这样做时:

New-Item -ItemType Directory -Name my_test_dir;
Set-Location my_test_dir;
$a = $( Get-Item . | Select-Object Name ); 
write-host( "x${a}x" );

我明白了

x@{Name=my_test_dir}x

而不是我预期的

xmy_test_dirx

那么,我如何“拆箱”目录的名称?


PS - 为了便于测试,我使用:

mkdir my_test_dir; cd my_test_dir; $a = $( Get-Item . | Select Name ); echo "x${a}x"; cd ..; rmdir my_test_dir

【问题讨论】:

  • 使用select-object -expand name。对象具有属性/值对,除非它们是原语。所以你必须做一些不同的事情才能获得价值。另一种方法是使用会员访问:$a.name
  • Select-Object PropertyName 生成一个具有名为PropertyName 的属性的对象,从输入项的相应属性中复制值。使用Select-Object -ExpandProperty PropertyName 只获取属性的值
  • @MathiasR.Jessen 为什么不让您的评论成为答案?
  • 为了节省管道的开销,你可以得到这样的名字:$a = (Get-Item .).Name
  • @Sled 提问,您将收到 ^_^

标签: powershell powershell-7.0


【解决方案1】:

当您使用... |Select-Object PropertyName 时,它会生成一个具有名为PropertyName 的属性的对象,并从输入项的相应属性中复制值。

使用Select-Object -ExpandProperty PropertyNameForEach-Object MemberName 只获取属性的值:

$a = Get-Item . | Select-Object -ExpandProperty Name 
# or 
$a = Get-Item . | ForEach-Object Name

...或直接引用属性:

$a = (Get-Item .).Name

【讨论】:

    猜你喜欢
    • 2021-02-03
    • 2018-07-19
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多