【发布时间】:2022-01-12 17:46:03
【问题描述】:
我有一个用于获取各种 AD 组的所有成员的脚本,但最近我们需要获取的不仅仅是成员的姓名,还需要获取各种属性,例如 Title 或 Office。我尝试调整我的脚本,以便您可以输入需要定义的属性,但它没有按我的意愿工作,所以我希望有人能提供帮助。
这是我的原始脚本:
$EndDate = (Get-Date).ToString("yyyy-MM-dd_HHmm")
$FileName = $ADGroup + '_' + $EndDate + '_ADGroupReport.csv'
$FilePath = 'P:\Information Technology\IT Reports\' + $FileName
function Get-Members {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true, HelpMessage="Enter a valid AD Group.")]
[string]$ADGroup,
[Parameter(Mandatory=$false, HelpMessage="Enter valid AD Properties seperated by a comma.")]
$Properties
)
process {
if (!$Properties) {
Get-ADGroupmember -identity $ADGroup | select name | Export-Csv -Path $FilePath
} else {
Get-ADGroupmember -identity $ADGroup | where{$_.ObjectClass -eq "user"} | Get-ADUser -Properties '$Properties' | select name, $Properties | Export-Csv -Path $FilePath
}
}
}
$Group = Read-Host -Prompt 'Enter a valid AD Group:'
$Prop = Read-Host -Prompt 'Enter any additional properties needed:'
Get-Members -ADGroup $Group -Properties $Prop
如果我只输入 1 个属性,这似乎在尝试阶段有效,但在最后阶段失败。如果我输入多个属性,例如标题、办公室,那么这两个阶段都会失败。
输入其他属性时出现的错误如下。我的假设是它不喜欢这个字符串并且更喜欢数组?老实说,我不确定如何处理这个问题。
Get-ADUser : One or more properties are invalid.
Parameter name: $Properties
At line:10 char:79
+ ... bjectClass -eq "user"} | Get-ADUser -Properties '$Properties' | selec ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (REDACTED) [Get-ADUser], ArgumentException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
在任何人说什么之前,我知道如果没有输入任何属性,try 块将失败,它目前仅用于我的测试。
【问题讨论】:
-
$Prop = Read-Host -Prompt 'Enter any additional properties needed:'中的不同属性如何区分?您应该向输入数据的用户说明这一点。然后在您的函数中,将$Properties中的给定字符串拆分为该分隔符。 (请记住,有人可以在 Read-Host 中输入几乎 任何内容,因此您需要内置检查以查看输入是否可行。) -
在我的测试中,我用逗号分隔它们,我认为这应该可以工作,因为如果我对属性进行硬编码,它们用逗号分隔并且可以正常工作。我会确保将其添加到有关如何将它们分开的提示中。
-
那你只需要用逗号分开我猜
-Properties ($Properties -split ',')。
标签: powershell active-directory