Join-String

将管道中的对象合并为单个字符串。

语法

Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]
Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-SingleQuote]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]
Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-DoubleQuote]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]
Join-String
    [[-Property] <PSPropertyExpression>]
    [[-Separator] <String>]
    [-OutputPrefix <String>]
    [-OutputSuffix <String>]
    [-FormatString <String>]
    [-UseCulture]
    [-InputObject <PSObject[]>]
    [<CommonParameters>]

说明

Join-String cmdlet 联接或将管道对象中的文本合并到单个字符串中。

如果未指定任何参数,管道对象将转换为字符串,并使用默认分隔符 $OFS联接。

注意

当设置 $OFS 其值用于将数组转换为字符串时联接数组,直到变量重置为 $null。 由于使用 $OFS 可能会对代码中的其他位置产生意外的影响,因此最好改用 分隔符 参数。

通过指定属性名称,该属性的值将转换为字符串并联接到字符串中。

可以使用脚本块而不是属性名称。 脚本块的结果在联接到形成结果之前将转换为字符串。 它可以合并对象属性的文本或转换为字符串的对象的结果。

PowerShell 6.2 中引入了此 cmdlet。

示例

示例 1:联接目录名称

此示例联接目录名称,用双引号包装输出,并使用逗号和空格(, )分隔目录名称。 输出是字符串对象。

Get-ChildItem -Directory C:\ | Join-String -Property Name -DoubleQuote -Separator ', '

"PerfLogs", "Program Files", "Program Files (x86)", "Users", "Windows"

Get-ChildItem 使用 Directory 参数获取 C:\ 驱动器的所有目录名称。 对象将向下发送到管道以 Join-String属性 参数指定目录名称。 DoubleQuote 参数用双引号包装目录名称。 分隔符 参数指定使用逗号和空格(, )分隔目录名称。

Get-ChildItem 对象 System.IO.DirectoryInfoJoin-String 将对象转换为 system.String

示例 2:使用属性子字符串联接目录名称

此示例使用子字符串方法获取目录名称的前四个字母,用单引号包装输出,并使用分号分隔目录名称(;)。

Get-ChildItem -Directory C:\ | Join-String -Property {$_.Name.SubString(0,4)} -SingleQuote -Separator ';'

'Perf';'Prog';'Prog';'User';'Wind'

Get-ChildItem 使用 Directory 参数获取 C:\ 驱动器的所有目录名称。 对象将向下发送到管道以 Join-String

属性 参数脚本块使用自动变量($_)来指定每个对象的 Name 属性子字符串。 子字符串获取每个目录名称的前四个字母。 子字符串指定字符开始和结束位置。 SingleQuote 参数用单引号包装目录名称。 分隔符 参数指定使用分号(;)分隔目录名称。

有关自动变量和子字符串的详细信息,请参阅 about_Automatic_Variables子字符串

示例 3:在单独的行上显示联接输出

此示例将服务名称与每个服务联接在一个单独的行中,并缩进一个选项卡。

Get-Service -Name se* | Join-String -Property Name -Separator "`r`n`t" -OutputPrefix "Services:`n`t"

Services:
    seclogon
    SecurityHealthService
    SEMgrSvc
    SENS
    Sense
    SensorDataService
    SensorService
    SensrSvc
    SessionEnv

Get-Service 使用 Name 参数来指定以 se*开头的服务。 星号(*)是任何字符的通配符。

对象会向下发送到使用 属性 参数指定服务名称的 Join-String分隔符 参数指定三个特殊字符,这些字符表示回车符(`r)、换行符(`n)和制表符(`t)。 OutputPrefix 在第一行输出前插入带有新行和制表符的标签 Services:

有关特殊字符的详细信息,请参阅 about_Special_Characters

示例 4:从对象创建类定义

此示例使用现有对象作为模板生成 PowerShell 类定义。

此代码示例使用喷洒来减少行长并提高可读性。 有关详细信息,请参阅 about_Splatting

$obj = [pscustomobject] @{Name = "Joe"; Age = 42}
$parms = @{
  Property = "Name"
  FormatString = '  ${0}'
  OutputPrefix = "class {`n"
  OutputSuffix = "`n}`n"
  Separator = "`n"
}
$obj.PSObject.Properties | Join-String @parms

class {
  $Name
  $Age
}

参数

-DoubleQuote

用双引号包装每个管道对象的字符串值。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-FormatString

指定一个格式字符串,该字符串指定在联接管道对象之前应如何设置其格式。 使用 {0} 占位符表示当前对象。 如果需要将大括号({})保留为带格式的字符串,可以通过加倍大括号({{}})来转义大括号。

有关详细信息,请参阅 String.Format 方法和 复合格式

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

指定要联接的文本。 输入一个包含文本的变量,或键入一个命令或表达式,用于获取要联接到字符串中的对象。

类型:PSObject[]
Position:Named
默认值:None
必需:False
接受管道输入:True
接受通配符:False

-OutputPrefix

在输出字符串之前插入的文本。 字符串可以包含特殊字符,例如回车符(`r)、换行符(`n)和制表符(`t)。

类型:String
别名:op
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-OutputSuffix

追加到输出字符串的文本。 字符串可以包含特殊字符,例如回车符(`r)、换行符(`n)和制表符(`t)。

类型:String
别名:os
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Property

要转换为文本的属性或属性表达式的名称。

类型:PSPropertyExpression
Position:0
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Separator

在每个管道对象的文本之间插入的文本或字符,例如逗号或分号。

默认情况下,在没有分隔符的情况下联接管道对象。 如果设置了 输出字段分隔符 首选项变量($OFS),则使用该值,除非指定此参数。

注意

当设置 $OFS 其值用于将数组转换为字符串时联接数组,直到变量重置为 $null。 由于使用 $OFS 可能会对代码中的其他位置产生意外的影响,因此最好改用 分隔符 参数。

类型:String
Position:1
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-SingleQuote

用单引号包装每个管道对象的字符串值。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-UseCulture

将当前区域性的列表分隔符用作项分隔符。 若要查找区域性的列表分隔符,请使用以下命令:(Get-Culture).TextInfo.ListSeparator

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

输入

PSObject

输出

String