powershell - 如何组合字符串输入并动态生成数组?
问题描述
param([string]$roles,[string]$members)
假设我像这样在命令行上传递输入
PS> role1,role2,role3,role4 member1,member2,,,,member3,,member4
我期望的数组是:
$array = @(
@('role1', 'member1,member2'),
@('role2', ''),
@('role3', 'member3'),
@('role4', 'member4')
)
我知道将字符串转换为数组:
$roles = 'role1,role2,role3,role4' -split ','
$members = 'member1,member2,,,,member3,,member4' -split ',,'
现在我该如何组合$roles
,$members
以便每个角色都与成员相关联?我将如何动态生成数组?
伪代码:
$array = @()
($roles+$members) | %{
$role = $_.roles
if ($_.members) {
$_.members -split ',,' | ForEach-Object { $array += $role $_ }
} else {
$array += $role
}
}
注意:我将成员拆分为每个双逗号的自己的索引,因为显然分号在命令行上不被接受,因为它们破坏了命令行,所以我必须使用双逗号作为分隔符
注意2:注意4个逗号:,,,,这表示role2没有要添加的成员,所以本质上它意味着在4个逗号之间没有输入该索引/项目(role2)的成员,即,,EMPTY, ,
解决方案
您的参数格式相当奇怪,但这是一种方法:
$roles = 'role1,role2,role3,role4' -split ','
$members = 'member1,member2,,,,member3,,member4' -split ',,'
$result = @()
for ( $i = 0; $i -lt $roles.Count; $i++ ) {
$result += ,@($roles[$i],$members[$i])
}
我建议重新设计脚本以使用标准 PowerShell 参数(工程努力是值得的,IMO)。
推荐阅读
- node.js - Dayjs 到 Mongo 的 JS 日期
- amazon-ec2 - 在 RHEL EC2 实例中安装 wget 时出错
- c++ - 如何在 Windows 2016 Server 版本 1607 中访问 SetThreadDescription()
- github - 如何修复来自 GitHub 桌面提交的错误标识?
- javascript - 使用 mongo 排序并首先返回特定的 objectId
- c++ - 一些测试用例没有通过
- keras - TPU 在尝试初始化和设置时抛出错误,然后在 tf.keras 模型构建期间抛出错误
- mysql - 如何在 mysql 数据库中导入 GeoJson 文件?
- python - 我没有得到像 True 或 False 这样的结果,我哪里出错了?
- r - R:为什么我的热图看起来不同,这取决于我是否先对数据进行排序?