创建 PowerShell 脚本模板以轻松进行组管理

Posted

技术标签:

【中文标题】创建 PowerShell 脚本模板以轻松进行组管理【英文标题】:Creating PowerShell Script templates for easy group management 【发布时间】:2021-05-05 22:57:42 【问题描述】:

首先感谢其他用户的帮助,让我学到了很多。

我的公司有很多用户模板(很多不同的组设置取决于操作)。因此,我想让我的大学更轻松地将用户分配给运营部门。

我想到了一个解决方案,我的大学将用户和组输入到 CSV 文件,然后脚本通过 CSV 行,检测操作,然后转到操作 TXT 文件以获取组信息,然后添加用户。 这些文件是: UserAndOperation.csv 它包括 2 列,第一列是用户,第二列是操作 然后添加TXT文件,在其中为每一行添加组(我还想只制作一个操作csv,第一列是操作名称,第二列是必须添加的组,并用“,”分隔但这吓坏了我的眼睛:D)。

这是我创建的科学怪人代码:

Import-Csv ".\UserAndOperation.csv" | ForEach-Object get-aduser $_.User | if($_.Operation = "Operation1")
        $Groups = Get-Content .\operation1.txt
        foreach($group in $groups)
        Add-ADPrincipalGroupMembership -Identity $_.User -MemberOf $Group
    
elseif ($_.Operaiton = "Operation2")
        $Groups = Get-Content .\operation2.txt
        foreach($group in $groups)
        Add-ADPrincipalGroupMembership -Identity $_.User -MemberOf $Group
    

And goes for each operation

它给出了一个错误,它不能识别 if 和 elseif 语句。

我不知道如何继续,有人可以帮我解决它吗?

感谢和最好的问候。

【问题讨论】:

【参考方案1】:

您不能将结果通过管道传输到 if 语句中。 例如

get-aduser $_.User | if($_.Operation

你还有一个错字:

$_.Operaiton

我建议通过尝试每行放置一个语句来清理代码,以免混淆自己,输出调试语句等。

【讨论】:

【参考方案2】:

与already been pointed out 一样,您不能将任意控制流语句(如if)放入管道语句的中间。

除此之外,您预期的if/else 方法将意味着大量重复代码,使脚本更难维护。

您可以使用哈希表 (@) 将操作名称“映射”到相关文件名,这样您只需要编写循环来添加组成员身份一次

# map the Operation column value to the relevant file path
$operations = @
  'Operation1' = 'path\to\operation1.txt'
  'Operation2' = 'path\to\operation2.txt'
  'Operation3' = 'path\to\operation3.txt'


Import-Csv ".\UserAndOperation.csv" | ForEach-Object 
  $User = Get-ADUser $_.User
  $Groups = Get-Content $operations[$_.Operation]
  foreach($Group in $Groups)
    Add-ADPrincipalGroupMembership -Identity $User -MemberOf $Group
  

【讨论】:

以上是关于创建 PowerShell 脚本模板以轻松进行组管理的主要内容,如果未能解决你的问题,请参考以下文章

powershell 此SharePoint Powershell脚本会检查网站集和Web应用程序中的所有网站,以查找特定的Web模板

powershell 此脚本在不移动数据的情况下复制列表。它将列表保存为模板,使用模板创建列表,然后删除t

在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试

PowerShell:30行代码轻松实现SQL Server数据库容量监控

在Powershell脚本中安全的使用密码信息

如何编写Powershell脚本以提取.iso文件并通过创建文件夹将其复制到文件夹中