【问题标题】:Split multiple strings from a text file to create an array in powershell从文本文件中拆分多个字符串以在 powershell 中创建一个数组
【发布时间】:2021-12-31 18:23:33
【问题描述】:

我是 Powershell ISE 的新手,我不知道该怎么做。

我想获取字符串(uxxxx axxxx 名称电子邮件)并将其作为包含用户名、管理员和名称的表返回(希望最终自动化电子邮件)。 我的代码目前是这样的:

$users = Get-Content ".\FileName.txt"
$line = "Username, Admin, Name, Email"
$parts = $line.Split(" ")

  $Test = Foreach ($user in $users) {
          Select-Object Username, Admin, Name
          }
  $Test | Sort-Object -Property Name | Out-GridView

这只是代码的淡化版本,因为它将通过域和身份验证过程,但我希望有人可以帮助我让表格暂时正常工作。

【问题讨论】:

  • 如果没有看到 FileName.txt 中的确切示例行,很难回答。 $line 建议使用逗号分隔值 (CSV),所以也许您可以在数据上使用 Import-Csv 而不是 Get-Content?您将$line 拆分为空格,这会将逗号留在$parts 中,这似乎无济于事-除非您不使用$parts,所以我猜没关系。您的select-object 没有将需要的数据通过管道传输到其中,但是您不能在来自Get-Content 的行上使用像这样的选择对象。您可以在 Import-Csv 的输出上使用 Select-Object,所以如果可以使用它,请执行。
  • 确切的行是这样的: uabcd aabcd John Doe john.doe@xxx.xxx.xx 有几十行不同的数据。我假设必须正确分隔数据(逗号),但我目前正在处理这个问题。
  • 嗯,按空格分割会将“John Doe”变成两列。然后取决于您是否可以保证每行名称中都有空格。如果任何行在该列中有一个或三个名称,这些行将分成不同的列数,这意味着数据被读入了错误的列。

标签: arrays powershell foreach powershell-ise


【解决方案1】:

根据您所展示的内容,John Doe 部分意味着您不能使用 Import-Csv 或在空格上轻松拆分,而无需在之后重新组合该列。

我在想:从左边分开两次空格,然后用字符串的其余部分从右边找到最后一个空格并在它周围挑选出来。为 John Doe 列留下尽可能多的空格。 (这只有在您可以保证用户名、管理员名称和电子邮件中永远不会有空格的情况下才有效。如果不止一列中可以有空格,那么您没有明显的方法可以将空格作为列分隔符与作为数据的空格区分开来) .

$rows = Get-Content -Path '.\FileName.txt'

$users = foreach ($r in $rows) {

    # Take 2 columns from the left, and store the rest        
    $user, $admin, $rest = $r.Split(' ', 3)

    # Walk back from the right to the first space
    # and pick either side of it
    $i = $rest.LastIndexOf(' ')
    $name = $rest.Substring(0, $i)
    $email = $rest.Substring($i+1)

    # Build an output that can work with Out-GridView
    [PSCustomObject]@{
        Username = $user
        Admin    = $admin
        Name     = $name
        Email    = $email
    }
}

$users | Out-GridView

【讨论】:

  • 我最终使用 notepad++ 将所有空格(除了名称)替换为逗号。我不确定是否还应该使用上面的代码,因为我已经做了这些更改,但我目前正在使用这个:$rows = Get-Content ".\FileName.txt" $users = foreach ($r in %rows){ $user, $admin, $name, $email $parts = $r.split(",") [PSCustomObject]@{ Username = $user Admin = $admin Name = $name Email = $email } } $users | Out-GridView
  • 如果你有逗号分隔列,你可以使用$users = Import-Csv -Path '.\FileName.txt' -Header User, Admin, Name, Email; $users | Out-GridView
猜你喜欢
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多