读取和过滤字符串行时出现问题

时间:2019-07-12 09:28:54

标签: powershell

我正在远离曾经依赖于.txt输入文件的用户创建脚本。现在,我想直接从Jira Ticket中获取信息。

为避免重做整个脚本,我希望$inputfile不再是.txt文件,而是$ticket.description

$ticket.description看起来像这样:

Vorname:  Adam
Nachname: Tester
Anstellungsart: Festangestellter
Job-Bezeichnung: IT-Guy
Unternehmen: StackOverFlow
Abteilung: ITS

以及读取它的代码,至少以以下内容开头:

$TicketKey = Read-Host "Please enter the Onboarding Ticket Key for this user"
$Ticket = Get-JiraIssue -Key $TicketKey
$Inputfile = $ticket.description | Out-String -Stream
$VornameDis = $inputfile | ?{$_ -like "*Vorname*"} | %{$_.split(":")[1]} | %{$_.trim()}
$NachnameDis = $inputfile | ?{$_ -like "*Nachname*"} | %{$_.split(":")[1]} | %{$_.trim()}

但是对于$ VornameDis或$ NachnameDis,输出始终为:

Adam
Nachname

我认为Out-String -Stream有一个问题,就是不能通过换行符拆分输入,但是不能确定。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

[some-value-expression] |Out-String -Stream的输出将是每个输入元素一个字符串-并且由于$ticket.description可能已经是一个字符串,因此最终$inputfile是一个大的多行字符串

为了将每一行过滤为一个单独的字符串,我们首先需要将其拆分为新的行字符:

$intputfile = $inputfile -split '\r?\n'
$VornameDis = $inputfile | ?{$_ -like "*Vorname*"} | %{$_.split(":")[1]} | %{$_.trim()}
$NachnameDis = $inputfile | ?{$_ -like "*Nachname*"} | %{$_.split(":")[1]} | %{$_.trim()}

尽管我怀疑您可以完全跳过Out-String并这样做:

$inputfile = $ticket.description -split '\r?\n'
$VornameDis = $inputfile | ?{$_ -like "*Vorname*"} | %{$_.split(":")[1]} | %{$_.trim()}
...