用值填充 powershell 数组,每行一个,不需要引号?

用值填充 powershell 数组,每行一个,不需要引号?

我的脚本通常会遍历数组中的项目列表,这些项目通常是从其他地方粘贴的,例如 excel 或其他脚本。我目前像这样填充数组:

$vmlist = @(
#group 1
"vmname1"
"vmname2"
# group 2
"vmname3"
"vmname4"
#"vmname5"
)

优点是我可以轻松地用#添加注释或者注释掉行。

缺点是必须手动添加引号。我通常使用 notepad++ 中的正则表达式来添加引号,但使用我的脚本的其他人通常会弄乱引号(缺失或不匹配)。

是否有一个 powershell 技巧可以让我像这样不引用项目列表,理想情况下仍然支持评论。

$vmlist = @(
vmname1
vmname2
vmname3
vmname4
)

我想我可以做这样的事情并通过用 \r\n 拆分、修剪、删除空行、忽略 # 后的文本进行后期处理,最后将其存储到同名数组中,但好奇是否有更聪明/更好的方法。

$vmlist = "
vmname1
vmname2
vmname3
vmname4
vmname5
"

答案1

使用此处字符串从其他地方粘贴文本:

要在 PowerShell 中定义 here-string,您需要使用字符@ ,后跟单引号或双引号,然后是换行符。要结束,请关闭引号并@在换行符上添加另一个引号:

$vmlist = @"
#group 1
vmname1
vmname2
# group 2
vmname3
vmname4
#vmname5
"@ -split [System.Environment]::NewLine -notmatch "^#"
$vmlist
vmname1
vmname2
vmname3
vmname4
  • 优点我可以轻松添加注释或注释掉行#
  • 缺点消除

答案2

在内联数组中执行此操作非常困难。我自己也遇到过类似的问题,并且不得不使用文本文件作为源列表。类似这样的操作应该可以达到你想要的效果:

Get-Content C:\Installs\SourceFiles.txt | Where {$_ -notlike "#*"} | Where {$_.trim() -ne ""} | ForEach {
    Write-Host $_
    #Do Your Stuff Here
}

在此处输入图片描述

相关内容