PowerShell 5.1到PowerShell 7抛出ActiveDirectory错误

amrnrhlw  于 2023-11-18  发布在  Shell
关注(0)|答案(1)|浏览(159)

我们正在将PowerShell 5.1升级到PowerShell 7的过程中,遇到了一些关于模块“ActiveDirectory”的问题。

Import-Module ActiveDirectory -SkipEditionCheck

$adGroup = New-Object Microsoft.ActiveDirectory.Management.ADGroup Identity -Property @{
    Description    = 'ROL group'
    CanonicalName  = 'contoso.com/Groups/test'
    SamAccountName = 'test'
    GroupCategory  = 'Security'
    GroupScope     = 'Universal'
}

字符串
这会抛出两个错误:
无法从程序集"System. Management. Automation,Version=7.3.8.500,Culture=neutral,PublicKeyToken= 31 bf 3856 ad 364 e35“加载类型”System.Management.Automation.PSSnapIn“。New-Object:
找不到指定.NET对象的成员“Description”。
当我们用$adGroup | Get-Member检查这个对象时,似乎属性DescriptionCanonicalName在这个对象上不可用。
在PowerShell 5.1中,这段代码可以正常工作。模拟在两个PowerShell版本中都工作的AD安全组的最佳方法是什么?

olqngx59

olqngx591#

这可能不起作用,我没有一个环境来测试在这个时候的一天。
若要解决此问题并创建在两个PowerShell版本中都有效的脚本,您可以利用System.DirectoryServices.AccountManagement命名空间,它提供了一种更一致的方式来跨不同的PowerShell版本与Active Directory进行交互。下面是如何使用此命名空间创建新AD组的示例:

# Required for compatibility between PowerShell 5.1 and 7
Add-Type -AssemblyName System.DirectoryServices.AccountManagement

# Establish the context for the domain
$contextType = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$principalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $contextType

# Create a new group principal
$groupPrincipal = New-Object System.DirectoryServices.AccountManagement.GroupPrincipal -ArgumentList $principalContext

# Set the properties for the group
$groupPrincipal.Description = 'ROL group'
$groupPrincipal.Name = 'test'
$groupPrincipal.SamAccountName = 'test'
$groupPrincipal.Save()

# Get the newly created group
$newGroup = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($principalContext, 'test')

# Output the group details
$newGroup | Format-List *

字符串
使用System.DirectoryServices.AccountManagement命名空间有助于创建跨不同版本的PowerShell管理Active Directory的一致方法。在运行脚本之前,请确保您具有创建AD对象的必要权限。
这种方法应该在PowerShell 5.1和PowerShell 7中无缝工作。

相关问题