我想在多个AD本地化中搜索用户。我想通过使用哈希表避免使用多个if语句,但我无法正确执行。我的尝试:
$ADSzukajTu = [ordered]@{
'1' = 'OU=sales,DC=contoso,DC=pl'
'2' = 'OU=hr,DC=contoso,DC=pl'
'3' = 'OU=marketing,DC=contoso,DC=pl'
'4' = 'OU=production,DC=contoso,DC=pl'
}
function SzukajADUsera ($fSzukajADUseraKogo)
{
$i = 0
do
{
$ADSzukajTu.GetEnumerator() | ForEach-Object
{
$ADUser = Get-ADUser -Filter $fSzukajADUseraKogo -Server $ADDC -SearchBase $_.Value -Properties name, sAMAccountName, sn, givenName, l, title, displayName, company, department, StreetAddress, Office, OfficePhone, Manager, mail, PostalCode, State, Country -ErrorAction SilentlyContinue | Select-Object -Property name, sAMAccountName, sn, givenName, l, title, displayName, company, department, StreetAddress, Office, OfficePhone, Manager, mail, PostalCode, State, Country
$i++
}
}
While ((($ADUser | Measure-Object).Count -lt 1) -and ($i -le $ADSzukajTu.Count))
Return $ADUser
}
当我运行脚本并调用该函数时
SzukajADUsera -fSzukajADUseraKogo "sAMAccountName -eq '$($WzorUser.sAMAccountName)'"
我得到提示“命令管道位置1处的cmdlet ForEach-Object”到“*为以下参数提供值:处理”。
我成功地使用类似的方法来替换语言特定的字符。
$PodmianyPLZnaki = [ordered]@{
'ą' = 'a'
'ć' = 'c'
'ę' = 'e'
'ł' = 'l'
'ń' = 'n'
'ó' = 'o'
'ś' = 's'
'ź' = 'z'
'ż' = 'z'
}
$NoweMail = ($WzorUser.GivenName + '.' + $WzorUser.Surname).ToLower()
$PodmianyPLZnaki.GetEnumerator() | ForEach-Object
{
$NoweMail = $NoweMail -replace $_.Key, $_.Value
}
我究竟做错了什么?
正如Mathias R. Jessen所说,将开口花括号放在与ForEach-Object
相同的线上。这不仅需要在ForEach-Object
之后,而且还是一种更好的做法,并将帮助您在将来更好地解决这些问题。
我也相信有更好,更有效的方法来实现你所追求的结果。请参考以下示例,我尝试保留变量中使用的语言。
function SzukajADUsera () {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$fSzukajADUseraKogo
)
$ADSzukajTuArray = @(
'OU=sales,DC=contoso,DC=pl'
'OU=hr,DC=contoso,DC=pl'
'OU=marketing,DC=contoso,DC=pl'
'OU=production,DC=contoso,DC=pl'
)
$ADUser = Get-ADUser -Filter $fSzukajADUseraKogo
foreach($ADSzukajTu in $ADSzukajTuArray) {
if($ADUser.DistinguishedName -match $ADSzukaj) {
return $ADUser
}
}
}
SzukajADUsera -fSzukajADUseraKogo "sAMAccountName -eq 'test.user'"
正如Mathias R. Jessen和John Seerden指出的那样,将开口花括号放在与ForEach-Object
相同的行上解决了问题(因此我无法让PowerShell Studio更改代码布局)。再来一次。
具有讽刺意味的是,我指出作为工作示例的循环停止工作。我必须做同样的修正才能再次运行。
当我这样调用它时,函数返回变量值:
$ADUser = SzukajADUsera -fSzukajADUseraKogo "sAMAccountName -eq '$($WzorUser.sAMAccountName)'"