我有一個用于獲取各種 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 個屬性,這似乎在嘗試階段有效,但在最后階段失敗。如果我輸入多個屬性,例如 title,office,那么它在兩個階段都會失敗。
輸入其他屬性時出現的錯誤如下。我的假設是它不喜歡這個作為字串而更喜歡陣列?老實說,我不確定如何處理這個問題。
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 塊將失敗,它目前僅用于我的測驗。
uj5u.com熱心網友回復:
我可以在您的代碼中看到三個問題,第一個,單引號-Properties '$Properties'不允許擴展變數$Properties,它將作為傳遞文字字串。
應該:
Get-ADUser -Properties $Properties
第二個問題,這樣做Select-Object Name, $Properties會拋出以下例外(假設$Properties本來是一個array):
$properties = 'email', 'title'
[PSCustomObject]@{
Name = 'User'
Email = '[email protected]'
Title = 'Administrator'
} | Select-Object Name, $properties
無法轉換
System.Object[]為以下型別之一 {System.String,System.Management.Automation.ScriptBlock}。
您可以執行以下操作,以便Name始終包含在$Properties變數中:
$properties = ,'name' # => This is hardcoded
$properties = 'email', 'title' # => This is user input
[PSCustomObject]@{
Name = 'User'
Email = '[email protected]'
Title = 'Administrator'
} | Select-Object $properties
Name Email Title
---- ----- -----
User [email protected] Administrator
第三個問題是Theo 在他的評論中指出的問題,Read-Host將用戶輸入存盤為string,因此,假設用戶實際上,用作每個屬性的分隔符,您可以將輸入轉換為arrayusing-split或.split():
$prop = ,'name'
$prop = (
Read-Host -Prompt 'Enter any additional properties needed'
).Split(',').ForEach('Trim')
假設輸入是例如email, title:
Enter any additional properties needed: email, title
name
email
title
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/376421.html
