从字符串或变量创建数组

时间:2017-05-15 20:10:19

标签: arrays powershell

我试图找到使用PowerShell从变量输出创建数组的最佳方法。

我有以下代码:

import os, shutil, sys

source = r"\\server\data"
dest = r"e:\dest"

for pth in os.listdir(source):
    if "." not in pth:
        newsource = source + "\\" + pth + "\\"

这给了我以下输出:

(c) 2016 - 2017 Use of this software is subject to license restrictions
::Microsoft Windows 7
::Microsoft Windows 7::name1
::Microsoft Windows 7::name2
::Microsoft Windows 7::name3
::Microsoft Windows 7::name4
::Microsoft Windows 7::name5
::Microsoft Windows 7::name6
::Microsoft Windows 7::name7

需要来自$ListNames = & "listNames.cmd" | Out-String name1的所有内容。

我尝试使用分隔符name7尝试将其转换为CSV,尝试创建:以及其他一些无法获得我想要的结果的尝试但未成功

非常感谢任何帮助或指导!

1 个答案:

答案 0 :(得分:0)

我可能会这样做:

  1. 删除Out-String。您希望无论如何都要逐行处理输出,因此合并这些行只需要您稍后再次拆分它们。
  2. 通过Where-Object过滤器(findfindstr过滤器将输出限制为相关行。)
  3. 拆分::处的每个剩余行,然后从每个结果数组中选择最后一个字段。
  4. & ".\listNames.cmd" | Where-Object {
        $_ -like '::*::*'
    } | ForEach-Object {
        ($_ -split '::')[-1]
    }
    

    另一个选项是正则表达式匹配,建议为@TheMadTechnician

    & ".\listNames.cmd" | Where-Object {
        $_ -match '^::.+?::(.+)'
    } | ForEach-Object {
        $matches[1]
    }