我有一个脚本,使用
Test-Path
和 AD:
驱动器来检查 Active Directory OU 列表是否存在。有几个 OU 在 distinguishedName
中带有逗号。
当我查找这些项目的
distinguishedName
值时,我看到逗号以传统方式用 '\' 字符转义。 此 DN 可与 Get-ADOrganizationalUnit
配合使用,但使用 Test-Path AD:\ + distinguishedName
时会引发错误
例如:
OU=Soz, Eggs and Chips,DC=BobsCafe,DC=co,DC=uk1
我可以这样获取 OU 属性:
Get-ADOrganizationalUnit "OU=Soz\, Eggs and Chips,DC=BobsCafe,DC=co,DC=uk"
但是如果我尝试这个:
Test-Path "AD:\OU=Soz\, Eggs and Chips,DC=BobsCafe,DC=co,DC=uk"
它抛出此错误(三次!)并返回
True
:
Test-Path : The object name has bad syntax
At line:1 char:1
+ Test-Path "AD:\OU=Soz\, Eggs and Chips,DC=BobsCafe,DC=co,DC=uk
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (\\RootDSE\OU=So...afe,DC=co,DC=uk:String) [Test-Path], ADException
+ FullyQualifiedErrorId : ADProvider:ItemExists::ADError,Microsoft.PowerShell.Commands.TestPathCommand
我也尝试过这个:
Test-Path 'AD:\OU=Soz, Eggs and Chips,DC=BobsCafe,DC=co,DC=uk'
没有错误,但它返回
False
,即使 OU 存在。
这三个尝试也都得到了相同的结果:
Test-Path 'AD:\OU=Soz`, Eggs and Chips,DC=BobsCafe,DC=co,DC=uk'
Test-Path 'AD:\OU=Soz`2C Eggs and Chips,DC=BobsCafe,DC=co,DC=uk'
Test-Path 'AD:\OU=Soz\2C Eggs and Chips,DC=BobsCafe,DC=co,DC=uk'
我该怎么做?
您应该使用 ActiveDirectory PowerShell 模块。如果您的计算机上安装了 Microsoft 远程服务器管理工具,则也会安装必要的 PowerShell 模块。您可以通过在 PowerShell 中输入:
Get-Module -ListAvailable -Name ActiveDirectory
来检查是否拥有它。
如果您没有安装它(如果您管理 AD,那么您确实应该安装),您可以从已安装的计算机上获取这两个 DLL,这样您就可以在不安装任何内容的情况下使用 AD PowerShell 命令。
安装 AD PowerShell 模块后,验证 OU 是否存在非常简单:
$ouexist = $true
try
{
Get-ADOrganizationalUnit -Identity 'DC=fully,DC=qualified,DC=domain'
}
catch
{
$ouexist = $false
}