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>]
说明
cmdlet Join-String
将管道对象中的文本联接或合并到单个字符串中。
如果未指定任何参数,则管道对象将转换为字符串并使用默认分隔符 $OFS
联接。
注意
设置 $OFS
其值时,将用于在数组转换为字符串时联接数组,直到变量重置为 $null
。 由于 使用 $OFS
在代码中的其他位置可能会产生意外的影响,因此最好改用 Separator 参数。
通过指定属性名称,属性的值将转换为字符串并联接为字符串。
可以使用脚本块,而不是属性名称。 脚本块的结果在联接形成结果之前将转换为字符串。 它可以合并对象的 属性的文本或转换为字符串的对象的结果。
此 cmdlet 是在 PowerShell 6.2 中引入的。
示例
示例 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
。 Property 参数指定目录名称。 DoubleQuote 参数用双引号包装目录名称。
Separator 参数指定使用逗号和空格 (,
) 来分隔目录名称。
对象 Get-ChildItem
为 System.IO.DirectoryInfo ,并将 Join-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
。
Property 参数脚本块使用自动变量 ($_
) 来指定每个对象的 Name 属性子字符串。 子字符串获取每个目录名称的前四个字母。 子字符串指定字符开始和结束位置。 SingleQuote 参数用单引号包装目录名称。 Separator 参数指定使用分号 (;
) 分隔目录名称。
有关自动变量和子字符串的详细信息,请参阅 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
使用 Property 参数指定服务名称。 Separator 参数指定三个特殊字符,这些字符表示回车符 () `r
、换行符 (`n
) 和制表符 (`t
) 。 OutputPrefix 在第一行输出前插入带有新行和制表符的标签Services:
。
有关特殊字符的详细信息,请参阅 about_Special_Characters。
示例 4:从对象Create类定义
此示例使用现有对象作为模板生成 PowerShell 类定义。
此代码示例使用 splatting 来减少行长并提高可读性。 有关详细信息,请参阅 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
将每个管道对象的字符串值用双引号包装。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FormatString
指定一个格式字符串,该字符串指定在联接每个管道对象之前应如何设置其格式。 {0}
使用占位符表示当前对象。 如果需要在格式化字符串中保留大括号 ({}
) ,可以通过将大括号 ({{
加倍并 }}
) 来转义大括号。
有关详细信息,请参阅 String.Format 方法和 复合格式设置。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
指定要联接的文本。 输入一个包含文本的变量,或者键入一个命令或表达式,用于获取要联接到字符串中的对象。
Type: | PSObject[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-OutputPrefix
在输出字符串之前插入的文本。 字符串可以包含特殊字符,例如回车 () `r
、换行符 (`n
) 和制表符 (`t
) 。
Type: | String |
Aliases: | op |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutputSuffix
追加到输出字符串的文本。 字符串可以包含特殊字符,例如回车 () `r
、换行符 (`n
) 和制表符 (`t
) 。
Type: | String |
Aliases: | os |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
要转换为文本的属性或属性表达式的名称。
Type: | PSPropertyExpression |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Separator
在每个管道对象的文本之间插入的文本或字符,例如逗号或分号。
默认情况下,管道对象在没有分隔符的情况下进行联接。 如果设置了输出 字段分隔符 首选项变量 ($OFS
) ,则使用该值,除非指定此参数。
注意
设置 $OFS
其值时,将用于在数组转换为字符串时联接数组,直到变量重置为 $null
。 由于 使用 $OFS
在代码中的其他位置可能会产生意外的影响,因此最好改用 Separator 参数。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SingleQuote
将每个管道对象的字符串值包装在单引号中。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseCulture
使用当前区域性的列表分隔符作为项分隔符。 若要查找区域性的列表分隔符,请使用以下命令: (Get-Culture).TextInfo.ListSeparator
。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |