Как добавить SAMAccountName в вывод? - PullRequest
0 голосов
/ 24 июня 2019

Застряли на том, как добавить SAMAccounts (имена пользователей AD) к результатам, кто-нибудь может помочь, в настоящее время нет результатов в списке SamAccountName?

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission | where 
{$_.user.tostring() -ne "NT AUTHORITY\SELF" -and $_.IsInherited -eq 
$false} | 
Select Identity,User,SamAccountName,@{Name='Access Rights';Expression= 
{[string]::join(', ', $_.AccessRights)}} | Export-Csv -NoTypeInformation 
C:\temp\mailboxpermissions1.csv

Нет результатов для SAMAccountName

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

SamAccountName недоступно через Get-Mailbox или Get-MailboxPermission, но вы можете получить его с помощью Get-User с вычисленным свойством, см. Пример:

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission | 
where {$_.user.tostring() -ne "NT AUTHORITY\SELF" -and $_.IsInherited -eq $false} | 
Select Identity,User,@{N="SamAccountName";E={(Get-User $_.Identity).SamAccountName}},@{Name='Access Rights';Expression= {[string]::join(', ', $_.AccessRights)}} | 
Export-Csv -NoTypeInformation C:\temp\mailboxpermissions1.csv
0 голосов
/ 25 июня 2019

Вы можете получить SamAccountName с помощью командлета Get-Mailbox.

((Get-Mailbox -Filter '*')[0] | Get-Member).Name

# Results
<#
PS C:\Scripts> ((Get-Mailbox -Filter '*')[0] | Get-Member).Name
...
RoomMailboxAccountEnabled
RulesQuota
SamAccountName
SCLDeleteEnabled
...
#>

Get-Mailbox -Filter '*' | ForEach {$PSItem.SamAccountName}

# Results
<#
 Get-Mailbox -Filter '*' | ForEach {$PSItem.SamAccountName}
Administrator
...
#>

Он просто не передается по конвейеру, как указано здесь ...

Пример:

(Get-Mailbox -Filter '*' -ResultSize Unlimited).SamAccountName | 
ForEach{Get-MailboxPermission -Identity $PSItem} | 
Where-Object {
    $PSItem -ne 'NT AUTHORITY\SELF' -and 
    $PSItem.IsInherited -eq $false
} | Select-Object -Property '*'

# Results
<#
AccessRights    : {FullAccess, ReadPermission}
Deny            : False
InheritanceType : All
User            : NT AUTHORITY\SELF
Identity        : contoso.com/Users/Administrator
IsInherited     : False
IsValid         : True
ObjectState     : Unchanged

...
#>

Итак, попробуйте это так ...

(Get-Mailbox -Filter '*' -ResultSize Unlimited).SamAccountName | 
ForEach{Get-MailboxPermission -Identity $PSItem} | 
Where-Object {
    $PSItem -ne 'NT AUTHORITY\SELF' -and 
    $PSItem.IsInherited -eq $false
} | Select-Object -Property Identity,User,
@{Name = 'SamAccountName';Expression = {(Get-ADUser -Identity $($PSitem.Identity -split '/')[-1]).SamAccountName}},
@{Name = 'Access Rights';Expression = {[string]::join(', ', $PSItem.AccessRights)}}

# Results
<#
Identity                              User                SamAccountName   Access Rights                       
--------                              ----                --------------   -------------                       
contoso.com/Users/Administrator     NT AUTHORITY\SELF   Administrator    FullAccess, ReadPermission          
... 
#>

Обновление для OP

Что касается вашего комментария ...

Привет, эта ошибка вышла: Invoke-Command: Невозможно связать параметр 'Фильтрк цели.Параметр исключения «Фильтр»: «Неверный синтаксис фильтра. Описание синтаксиса параметров фильтра см. В справке команды.» * «В позиции 1».

…, как отмечено в моем комментарии перед этим обновлением.

Примером является обычный обычный PowerShell, и он должен работать локально или удаленно (при условии, что вы правильно настроили PSRemoting, и вы являетесь локальным администратором на удаленном компьютере и используете его как этого администратора)

Если вы запустите это ...

Invoke-Command -ComputerName ex01 -ScriptBlock {Get-Mailbox -Filter '*' -ResultSize Unlimited}

или это ...

Invoke-Command -ComputerName ex01 -ScriptBlock {(Get-Mailbox -Filter '*' -ResultSize Unlimited).SamAccountName}

Или это ...

Invoke-Command -ComputerName ex01 -ScriptBlock {Get-Mailbox -Filter '*' -ResultSize Unlimited | Select-Object -Property SamAccountName}

... почто происходит в вашей среде во время сеанса PSRemoting?

Если вы выполняете сеанс PSRemoting, как это ...

$ExpSession = New-PSSession -ConfigurationName 'Microsoft.Exchange' -ConnectionUri ("http://$Ex01Fqdn/PowerShell") -Authentication Kerberos -Credential $Creds

Import-PSSession $ExpSession

Тогда вам не нужна команда Invoke-Commandвообще, так как командлеты уже проксированы к вашей рабочей станции.Просто запустите код как есть.

Пример - неявный сеанс PSRemoting, использование -Prefix

Этот префикс не является абсолютно обязательным, он простопривычка, которую я использую для всех моих неявных удаленных сессий.-Prefix рекомендуется, если вы используете, скажем, командлеты Exchange Online и командлеты Exchange on-prem в одном и том же окне, чтобы избежать путаницы и ошибок.):

($ExpSession = New-PSSession -ConfigurationName 'Microsoft.Exchange' -ConnectionUri ("http://$Ex01Fqdn/PowerShell") -Authentication Default)

<#
 Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  8 Session8        ex01.contoso... Opened        Microsoft.Exchange       Available
#>


Import-PSSession $ExpSession -Prefix 'EXP'

<#
WARNING: The names of some imported commands from the module 'tmp_zucxz5zd.0ee' include unapproved verbs that might make them less discoverable. To find the commands wi
th unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.

ModuleType Version    Name                                ExportedCommands                                                                                             
---------- -------    ----                                ----------------                                                                                             
Script     1.0        tmp_zucxz5zd.0ee                    {Add-EXPADPermission, Add-EXPAvai...
#>

(Get-ExpMailbox -Filter '*' -ResultSize Unlimited).SamAccountName | 
ForEach{Get-ExpMailboxPermission -Identity $PSItem} | 
Where-Object {
    $PSItem -ne 'NT AUTHORITY\SELF' -and 
    $PSItem.IsInherited -eq $false
} | Select-Object -Property Identity,User,
@{Name = 'SamAccountName';Expression = {(Get-ADUser -Identity $($PSitem.Identity -split '/')[-1]).SamAccountName}},
@{Name = 'Access Rights';Expression = {[string]::join(', ', $PSItem.AccessRights)}}

# The results would be the same as my original response.
...