PowerShell - ActiveDirectory 模块

PowerShell - ActiveDirectory Module

我需要能够让用户 运行 需要 ActiveDirectory 模块的脚本。我复制了以下内容:

"C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory", "Microsoft.ActiveDirectory.Management.resources.dll", "Microsoft.ActiveDirectory.Management.dll".

脚本 运行 有两个 Get-ADUser 命令,一个没有 -Server 参数,另一个有。问题是前者有效,后者无效。

是否还有其他模块需要复制过来?

ActiveDirectory 模块依赖于 RSAT(远程服务器管理工​​具)。这对于 install/activate 通过 powershell 是可用的:https://mikefrobbins.com/2018/10/03/use-powershell-to-install-the-remote-server-administration-tools-rsat-on-windows-10-version-1809/

安装此模块后,您还会自动安装 Activedirectory 模块。

我不喜欢为非管理员安装管理工具的想法。即使您可以通过复制文件而不进行完整的 RSAT 安装来逃脱惩罚。最重要的原因是您大大增加了恶意行为者的攻击面。更好的解决方案是(Just Enough Administration)JEA,或哲学上类似的方法。

JEA/受限端点可能会变得复杂,但您可以执行的操作的摘要如下所示:

New-PSSessionConfigurationFile -Path 'C:\PSSessionConfigs\DemoPSEndpointConfig.pssc' -ModulesToImport ActiveDirectory -VisibleCmdlets "Get-ADUser"
Register-PSSessionConfiguration -Path 'C:\PSSessionConfigs\DemoPSEndpointConfig.pssc' -ShowSecurityDescriptorUI -Name DemoPSEndPoint

运行 在安装了 ActiveDirectory 模块(可能是整个 RSAT 组件)的系统上执行这些命令,它不需要是域控制器。它将创建一个新的 PowerShell 远程端点配置,该配置仅公开您想要的命令。 Register-PSSessionConfiguration 命令将显示一个安全对话框,您可以在其中授予要允许哪些用户连接、授予他们读取和执行权限。完成后,您可以使用如下 Invoke-Command 命令获得结果:

Invoke-Command -ComputerName <ServerName> -ConfigurationName DemoPSEndPoint -ScriptBlock { Get-ADUser <UserName> }

您可以在命令中添加 -Server 参数而不会出现问题。您可以在 New-PSSessionConfiguration 命令中扩展允许的 cmdlet。

同样,这是对更复杂主题的总结,但应该足以满足您的需求。

就个人而言,我不像使用启动脚本那样使用配置文件。我认为后者更灵活。您可以获得有关该 here 的一些信息。如果您真的想深入了解这一点,可以在文章末尾找到参考资料,其中包括对 PowerShell JEA 文档的 link。我用来开发自己的端点的一些 MVP 文章也有 link。