powershell - [PowerShell]获取内容并添加列条目?
问题描述
我正在尝试将用户列表输入 PowerShell 并获取附加到用户帐户的特定安全组。目前,我有两个部分 - 一个包含多条数据的 Excel 表,以及一个仅包含用户用户名的 .txt。我目前的脚本只是从 .txt 中输入用户的用户名,并从他们的帐户中获取与特定前缀匹配的安全组,但是我注意到这样做并没有给出任何特定的顺序。即使用户按特定顺序(完全从 excel 文档复制和粘贴),实际输出也不能很好地返回。
所以,这就是我现在想做的,我只是不知道怎么做。我想从Excel文档中获取内容,取所有的用户名,像我现在一样做Get-ADPrincipalGroupMembership,然后将安全组写回与用户名匹配的行。例如,如果我在 SG 中查找 msnow,它将获取 msnow 的 SG,然后将 SG 写回具有 msnow 的行,并继续遍历列表。它不只是做一个 Out-GridView,它实际上会将它写入 Excel 文档。
对完成这项工作有任何帮助吗?
这是我现在拥有的代码。
Import-Module ActiveDirectory
$Names = Get-Content C:\Temp\Users.txt
$Records = @()
Foreach ($ADUsers in $Names) {
Try {
$SG = Get-ADPrincipalGroupMembership -Identity $ADUsers | Select Name | Where {$_.Name -Like "SG - *"}
$SGName = $SG.Name
}
Catch [ADIdentityNotFoundException] {
$SGName = "User not found"
}
$Records += New-Object PSObject -Property @{"UserName" = $ADUsers;"Security Group" = $SGName}
}
Write-Host "Generating CSV File..."
$Records | Out-GridView
谢谢!
解决方案
如果您将 Excel 保存为 CSV,那么它看起来像
"用户名","安全组","InsideInfo" "bloggsj","","高个子" "ftastic","","没什么值得一提的"
事情不应该那么难做。
$out = 'D:\Test\Updated_usersandgroups.csv'
$csv = Import-Csv -Path 'D:\Test\usersandgroups.csv'
Write-Host "Updating CSV File..."
foreach ($user in $csv) {
try {
$SG = Get-ADPrincipalGroupMembership -Identity $user.UserName -ErrorAction Stop
# if more groups are returned, combine them into a delimited string
# I'm using ', ' here, but you can change that to something else of course
$SGName = ($SG | Where-Object {$_.Name -Like "SG - *"}).Name -join ', '
}
catch [ADIdentityNotFoundException] {
$SGName = "User $($user.UserName) not found"
}
catch {
# something else went wrong?
$SGName = $_.Exception.Message
}
# update the 'Security Group' value
$user.'Security Group' = $SGName
}
Write-Host "Generating updated CSV File..."
$csv | Export-Csv -Path $out -UseCulture -NoTypeInformation
# show output on screen
$csv | Format-Table -AutoSize # or -Wrap if there is a lot of data
# show as GridView (sorts by column)
$csv | Out-GridView
控制台中的输出看起来像
用户名安全组 InsideInfo -------- -------------- ---------- bloggsj SG - Group1, SG - Group1 高个子 ftastic SG - Group1 没什么值得一提的
注意:我不知道您的 Excel 在保存到 CSV 文件时使用什么分隔符。在我的荷兰机器上,它使用分号;
,所以如果在您的情况下这不是逗号,请将分隔符作为参数添加到Import-Csv
cmdlet:-Delimiter ';'
Excel 使用您的语言环境中设置的任何内容作为分隔符的 ListSeparator。在 PowerShell 中,您可以通过执行(Get-Culture).TextInfo.ListSeparator
. 在输出时,-UseCulture
开关将确保它使用该分隔符,以便 Excel 能够理解
推荐阅读
- apache - 修复 https://www 重定向后,CGI 脚本不再可用
- java - 设置长度时如何在StringBuilder中添加空格而不是null?
- vim - 在 Vimscript 中,如何从列表中跳过解构赋值中的元素?
- caching - 清除 Mule 4 中的 Cache Scope 和 Private 对象存储
- c# - 如何使用docfx从解决方案中的项目中收集所有xml文档?
- javascript - 从节点js中的缓冲区文件中删除图像元数据
- node.js - 'npm start' 抛出错误,而 'node main.js' 没有(表达)
- android - 如何连接到 000webhost 数据库?
- sql - WHERE 不能在 Postgresql 中使用 INNER JOIN
- sql-server - 如何使用 t-sql 编写包含声明的 xml 文件