我有一个表格(CSV),其中显示了曾经登录到一堆计算机的所有用户。用户可以有2个帐户,一个用户名以“ a”开头,另一个用户名以“ b”开头,例如a100和b100(后面的用户是同一个人)。
现在,我需要获得登录了两个以上帐户且不属于同一用户的计算机。因此,A64和B64不会报告为单独的用户。
这是我的基本清单:
PC1,A64,B52,B64,A41
PC2,A51,B42,B51,A23
PC3,A42,B51
PC4,A5,B5
PC5,A1,B1,A14,A6
我的计划是将“用户”列拆分为更多列,因此表如下所示:
Computername,user1,user2,user3,user4,UserX
完成此操作后,我可以遍历表并删除用户名中的前导字母,然后尝试摆脱双打。
您认为这有意义吗?
现在我已经陷入了第一个任务。我知道如何遍历第二列,但是如何设法将结果放入另一个数组中,所以输出将像这样:
Computername,user1,user2,user3,user4,UserX
你能帮我分开吗?
$UserComputers = import-csv -Delimiter ";" "input.csv" -Header
'Computername','user1','user2','user3','user4'
$UserComputers | Select-Object *,
@{n='User1';e={$_.User1.Split(',')[0]}},
@{n='User2';e={$_.User1.Split(',')[1]}}
我收到错误消息:Select-Object:无法处理该属性,因为属性“ User1”已经存在。
答案 0 :(得分:2)
使“用户”成为数组很有用。
Get-Content "input.csv" | foreach {
$name, $users = $_.Split(",")
[pscustomobject]@{ Name = $name; Users = $users }
} | Where-Object { ($_.Users.Substring(1) | Select-Object -Unique).Count -gt 2 }
输出如下。
Name Users
---- -----
PC1 {A64, B52, B64, A41}
PC2 {A51, B42, B51, A23}
PC3 {A42, B51}
PC5 {A1, B1, A14, A6}
答案 1 :(得分:1)
输入文件(input.csv)
PC1,A64,B52,B64,A41
PC2,A51,B42,B51,A23
PC3,A42,B51
PC4,A5,B5
PC5,A1,B1,A14,A6
Powershell脚本
Get-Content -Path .\input.csv |
Select-Object @{ Name = "Computer"; Expression = { $_.Split(',')[0] } },
@{ Name="Users"; Expression = { $_.Split(',')[1..($_.Split(',').Length-1)] |
Foreach-Object { $_.Substring(1) } | Select-Object -Unique } } |
Where-Object { $_.Users.Count -gt 2 }
结果:
Computer Users
------------- -----
PC1 {64, 52, 41}
PC2 {51, 42, 23}
PC5 {1, 14, 6}
P.S。奖励:如果要在屏幕上查看数组的四个以上元素,请更改变量
$FormatEnumerationLimit = 20
Explanation of the variable meaning
答案 2 :(得分:0)
如果文件类似于基本列表,则可以执行以下操作来构建包含所需所有列的新文件:
$maxColCount = 0
$data = get-content input.csv
foreach ($line in $data) {
$MaxColCount = [math]::Max($maxcolcount,($line -split ",").count)
}
$headers = @("ComputerName")
$MaxUserCount = $MaxColCount - 1
Foreach ($c in (1..$MaxUserCount)) {
$Headers += "User$c"
}
$Headers = $Headers -join ","
$Headers,$data | Set-Content "output.csv"
上面的代码假定input.csv
具有以下格式,并且第一列之后的每一列都是用户:
PC1,A64,B52,B64,A41
PC2,A51,B42,B51,A23
PC3,A42,B51
PC4,A5,B5
PC5,A1,B1,A14,A6