list - 使用列表作为变量的 Powershell 命令

标签 list powershell active-directory

我正在尝试编写一个脚本来查看用户以及他们所属的 AD 组,寻找具有多个“子组”的特定组。 例如 VPN-GRP-ONE、VPN-GRP-2、VPN-GRP-3...

尝试使用我在一些演示中找到的一些东西,但它无法正常工作,因为它希望导入 ActiveDirectory 模块以使用 get-aduser,并且不允许我们安装我们尚未拥有的新模块。 (我的可用模块中没有 ActiveDirectory)

我试图使用:

$list1 = C:\Users\MrAoxx\Documents\List1.txt
foreach ($_ in $list1) {
net user $_ /domain}

我希望得到输出,然后我可以采取下一步将其传输到一个新的文本文件,并开始从中剥离我需要的内容以获得我正在寻找的 AD 组名称,即:一,二,三。但它所做的只是打开 txt 文件,没有其他任何事情。

最佳答案

这并不有趣,但你可以 - 请注意,足够长的组名称绝对有可能会被截断:

Get-Content C:\Users\MrAoxx\Documents\List1.txt | Foreach-Object {
  $partOfGroups = ( ( net user $_ /domain | select-string '\*' | out-string ).Trim() -split "`r`n" ) |
    Foreach-Object { $_.Substring(29).Trim() -split '\*' } |
    Where-Object { -Not [String]::IsNullOrWhiteSpace($_) }

  # You can look for specific groups in $partOfGroups if that user is part
  # of any particular group, and process for that user here.
}

我将引导您了解其工作原理:

  1. 获取从文件中读取的当前用户的net user输出
  2. 选择包含 * 的所有行并将输出转换为字符串,并修剪前导和尾随空格。
  3. 将输出重新拆分回每行的数组中,以便于处理。
  4. 对于输出的每一行,删除前 29 个字符,并用 * 字符分割其余文本。
  5. 从最终数组输出中删除所有空字符串

这种花哨的解析是您应该选择安装 RSAT 工具的原因。以下是使用 Get-ADUser 执行此操作的方法:

Get-Content C:\Users\MrAoxx\Documents\List1.txt | Foreach-Object {
  $groups = ( ( Get-ADUser $_ -Property MemberOf ).MemberOf | Get-AdGroup ).Name

  # Process here
}

关于list - 使用列表作为变量的 Powershell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56082231/

相关文章:

java - JDialog 中的复选框列表

powershell - 有什么办法可以使用PowerShell脚本读取TeamCity用户定义的参数值

security - IIS7 允许 ApplicationPoolIdentity 访问网络位置

java - 如何使用 Java 反射将数组写入 XML 文件?

php - 如何按在该结果中出现次数最多的 id 对返回的 sql 结果进行排序

python - 自定义Python切片,请指教

c# - 一种自动化MS Office VBA代码 "Compile"函数的方法

PowerShell 变量冲突

jenkins slave 以用户身份运行

javascript - 将 Microsoft OAuth 身份验证限制为仅对 Web 应用程序进行身份验证,而不是对所有 Microsoft 服务进行身份验证