获取 AD 专有名称
Get AD distinguished name
我正在尝试从 CSV 文件中获取输入,该文件包含一组组名称(规范名称)并从中获取专有名称,然后输出到另一个 CSV 文件。代码:
#get input file if passed
Param($InputFile)
#Set global variable to null
$WasError = $null
#Prompt for file name if not already provided
If ($InputFile -eq $NULL) {
$InputFile = Read-Host "Enter the name of the input CSV file (file must have header of 'Group')"
}
#Import Active Directory module
Import-Module -Name ActiveDirectory -ErrorAction SilentlyContinue
$DistinguishedNames = Import-Csv -Path $InputFile -Header Group | foreach-Object {
$GN = $_.Group
$DN = Get-ADGroup -Identity $GN | Select DistinguishedName
}
$FileName = "RESULT_Get-DistinguishedNames" + ".csv"
#Export list to CSV
$DNarray | Export-Csv -Path $FileName -NoTypeInformation
我尝试了多种解决方案,none 似乎行之有效。目前,它会抛出一个错误,因为
Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again.
我也尝试使用 -Filter
,在之前的尝试中我使用了这个代码:
Param($InputFile)
#Set global variable to null
$WasError = $null
#Prompt for file name if not already provided
If ($InputFile -eq $NULL) {
$InputFile = Read-Host "Enter the name of the input CSV file(file must have header of 'GroupName')"
}
#Import Active Directory module
Import-Module -Name ActiveDirectory -ErrorAction SilentlyContinue
$DistinguishedNames = Import-Csv -Path $InputFile | foreach {
$strFilter = "*"
$Root = [ADSI]"GC://$($objDomain.Name)"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($root)
$objSearcher.Filter = $strFilter
$objSearcher.PageSize = 1000
$objsearcher.PropertiesToLoad.Add("distinguishedname") | Out-Null
$objcolresults = $objsearcher.FindAll()
$objitem = $objcolresults.Properties
[string]$objDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
[string]$DN = $objitem.distinguishedname
[string]$GN = $objitem.groupname
#Get group info and add mgr ID and Display Name
$props = @{'Group Name'= $GN;'Domain' = $objDomain;'Distinguished Name' = $DN;}
$DNS = New-Object psobject -Property $props
}
$FileName = "RESULT_Get-DistinguishedNames" + ".csv"
#Export list to CSV
$DistinguishedNames | Sort Name | Export-Csv $FileName -NoTypeInformation
过滤器与我在这里使用的不同,我找不到我使用的那个,我目前使用的是一次失败的尝试。
无论如何,我遇到的主要问题是它会获取组名,但在错误的域中搜索它(它不包括组织单位),这导致 none成立。但是,当我在 PowerShell 中搜索一个组时(使用 Get-ADGroup ADMIN
),它们会显示正确的 DN 和所有内容。感谢任何提示或代码示例。
您似乎错过了 $variable = cmdlet|foreach {script-block}
作业的重点。分配给 $variable
的对象应该被 returned(通过脚本块传递)以便在 $variable
中结束。您的两个主循环都包含 $somevar=expectedOutput
行的结构,其中 expectedOutput
是 New-Object psobject
或 Get-ADGroup
调用。对 $someVar
的赋值会抑制输出,因此脚本块对 return 没有任何内容,并且 $variable
保持为空。要解决此问题,请不要在应该 return 一个对象的调用前加上赋值到外部变量中。
$DistinguishedNames = Import-Csv -Path $InputFile -Header Group | foreach-Object {
$GN = $_.Group
Get-ADGroup -Identity $GN | Select DistinguishedName # drop '$DN=`
}
$DistinguishedNames | Export-CSV -Path $FileName -NoTypeInformation
第二个脚本也有同样的问题。
我正在尝试从 CSV 文件中获取输入,该文件包含一组组名称(规范名称)并从中获取专有名称,然后输出到另一个 CSV 文件。代码:
#get input file if passed
Param($InputFile)
#Set global variable to null
$WasError = $null
#Prompt for file name if not already provided
If ($InputFile -eq $NULL) {
$InputFile = Read-Host "Enter the name of the input CSV file (file must have header of 'Group')"
}
#Import Active Directory module
Import-Module -Name ActiveDirectory -ErrorAction SilentlyContinue
$DistinguishedNames = Import-Csv -Path $InputFile -Header Group | foreach-Object {
$GN = $_.Group
$DN = Get-ADGroup -Identity $GN | Select DistinguishedName
}
$FileName = "RESULT_Get-DistinguishedNames" + ".csv"
#Export list to CSV
$DNarray | Export-Csv -Path $FileName -NoTypeInformation
我尝试了多种解决方案,none 似乎行之有效。目前,它会抛出一个错误,因为
Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again.
我也尝试使用 -Filter
,在之前的尝试中我使用了这个代码:
Param($InputFile)
#Set global variable to null
$WasError = $null
#Prompt for file name if not already provided
If ($InputFile -eq $NULL) {
$InputFile = Read-Host "Enter the name of the input CSV file(file must have header of 'GroupName')"
}
#Import Active Directory module
Import-Module -Name ActiveDirectory -ErrorAction SilentlyContinue
$DistinguishedNames = Import-Csv -Path $InputFile | foreach {
$strFilter = "*"
$Root = [ADSI]"GC://$($objDomain.Name)"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($root)
$objSearcher.Filter = $strFilter
$objSearcher.PageSize = 1000
$objsearcher.PropertiesToLoad.Add("distinguishedname") | Out-Null
$objcolresults = $objsearcher.FindAll()
$objitem = $objcolresults.Properties
[string]$objDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
[string]$DN = $objitem.distinguishedname
[string]$GN = $objitem.groupname
#Get group info and add mgr ID and Display Name
$props = @{'Group Name'= $GN;'Domain' = $objDomain;'Distinguished Name' = $DN;}
$DNS = New-Object psobject -Property $props
}
$FileName = "RESULT_Get-DistinguishedNames" + ".csv"
#Export list to CSV
$DistinguishedNames | Sort Name | Export-Csv $FileName -NoTypeInformation
过滤器与我在这里使用的不同,我找不到我使用的那个,我目前使用的是一次失败的尝试。
无论如何,我遇到的主要问题是它会获取组名,但在错误的域中搜索它(它不包括组织单位),这导致 none成立。但是,当我在 PowerShell 中搜索一个组时(使用 Get-ADGroup ADMIN
),它们会显示正确的 DN 和所有内容。感谢任何提示或代码示例。
您似乎错过了 $variable = cmdlet|foreach {script-block}
作业的重点。分配给 $variable
的对象应该被 returned(通过脚本块传递)以便在 $variable
中结束。您的两个主循环都包含 $somevar=expectedOutput
行的结构,其中 expectedOutput
是 New-Object psobject
或 Get-ADGroup
调用。对 $someVar
的赋值会抑制输出,因此脚本块对 return 没有任何内容,并且 $variable
保持为空。要解决此问题,请不要在应该 return 一个对象的调用前加上赋值到外部变量中。
$DistinguishedNames = Import-Csv -Path $InputFile -Header Group | foreach-Object {
$GN = $_.Group
Get-ADGroup -Identity $GN | Select DistinguishedName # drop '$DN=`
}
$DistinguishedNames | Export-CSV -Path $FileName -NoTypeInformation
第二个脚本也有同样的问题。