我正在尝试在创建OU之前检查是否存在OU。我的问题是我有2个母亲OU“USER BY SITE”和“GROUP BY SITE”,我需要在那些2,1中存储完全相同的OU用于存储用户,另一个用于存储组。
到目前为止,我使用了这个功能:
function CheckOUExist
{
param($OUToSeek)
$LDAPPath = "LDAP://dc=Domain,dc=local"
$seek = [System.DirectoryServices.DirectorySearcher]$LDAPPath
$seek.Filter = “(&(name=$OUToSeek)(objectCategory=organizationalunit))”
$Result = $seek.FindOne()
return $Result
}
有我的问题,即使$ LDAPPath =“OU = USERS BY SITE,DC = Domain,DC = local”,我总是在“GROUP BY SITE”中获得OU。我错过了什么吗?有没有办法让[System.DirectoryServices.DirectorySearcher]只在我在$ LDAPPath中给出的OU中工作?
如果您需要更准确的细节,我很乐意为您提供。
提前谢谢。
答案 0 :(得分:12)
如Shay所建议的那样,如果你正在使用干净的数据,那么效果很好。
[string] $Path = 'OU=test,DC=domain,DC=com'
[adsi]::Exists("LDAP://$Path")
感谢这个伟大的起点!但是,如果您验证可能不清洁的数据,则会引发错误。可能的错误的一些示例是:
所有这些错误都应该被[System.Management.Automation.RuntimeException]
捕获,或者您可以将catch语句留空以捕获所有错误。
快速示例:
[string] $Path = 'OU=test,DC=domain,DC=com'
try {
$ou_exists = [adsi]::Exists("LDAP://$Path")
} catch {
# If invalid format, error is thrown.
Throw("Supplied Path is invalid.`n$_")
}
if (-not $ou_exists) {
Throw('Supplied Path does not exist.')
} else {
Write-Debug "Path Exists: $Path"
}
答案 1 :(得分:11)
尝试Exists方法,分别返回true / false:
[adsi]::Exists("LDAP://OU=test,DC=domain,DC=com")
答案 2 :(得分:2)
问题是构建DirectorySearcher对象。要正确设置搜索根目录,需要使用DirectoryEntry对象([ADSI]类型加速器)构建DirectorySearcher,而使用字符串。使用字符串时,该字符串用作LDAP过滤器,搜索根为空,从而使搜索者使用当前域的根。这就是为什么看起来它没有搜索你想要的OU。
如果您执行以下操作,我认为您将获得所需的结果:
$searchroot = [adsi]"LDAP://OU=USERS BY SITE,DC=Domain,DC=local"
$seek = New-Object System.DirectoryServices.DirectorySearcher($searchroot)
$seek.Filter = "(&(name=$OUToSeek)(objectCategory=organizationalunit))"
... etc ...
请注意,首先构造一个DirectoryEntry,然后使用它构建DirectorySearcher。
答案 3 :(得分:1)
怎么样:
Day g1_mean g2_mean p.value
1: 1 0.883406048 0.67177271 0.6674138
2: 2 0.007544956 -0.55609722 0.3948459
3: 3 0.409248637 0.28717183 0.8753213
4: 4 -0.540075365 0.23181458 0.1785854
5: 5 -0.632543900 -1.09965990 0.6457325
6: 6 -0.083221671 -0.96286343 0.2011136
7: 7 -0.044674252 -0.27666473 0.7079499
8: 8 0.260795244 -0.15159164 0.4663712
9: 9 -0.134164758 0.01136245 0.7992453
10: 10 0.496144329 0.76168408 0.1821123
现在已加载#Requires -Version 3.0
# Ensure the 'AD:' PSDrive is loaded.
if (-not (Get-PSDrive -Name 'AD' -ErrorAction Ignore)) {
Import-Module ActiveDirectory -ErrorAction Stop
if (-not (Get-PSDrive -Name 'AD' -ErrorAction Silent)) {
Throw [System.Management.Automation.DriveNotFoundException] "$($Error[0]) You're likely using an older version of Windows ($([System.Environment]::OSVersion.Version)) where the 'AD:' PSDrive isn't supported."
}
}
PSDrive,我们有几个选项:
AD:
答案 4 :(得分:-1)
Import-Module ActiveDirectory
Function CheckIfGroupExists{
Param($Group)
try{
Get-ADGroup $Group
}
catch{
New-ADGroup $Group -GroupScope Universal
}
}
也会起作用