Запуск сценария против всех партнеров-арендаторов - PullRequest
0 голосов
/ 31 октября 2018

Я являюсь администратором Microsoft Partner Center 365 нашей компании для наших клиентов. Нам необходимо запустить следующий скрипт на всех наших арендаторах. В связи с тем, что арендаторы добавляли и удаляли пользователей, нам было поручено запускать эту процедуру один раз в месяц для всех пользователей, чтобы обеспечить получение всех новых пользователей.

#This script will enable non-owner mailbox access auditing on every mailbox in your tenancy
#First, let's get us a cred!
$userCredential = Get-Credential

#This gets us connected to an Exchange remote powershell service
$ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $userCredential -Authentication Basic -AllowRedirection
Import-PSSession $ExoSession

#Enable global audit logging
Get-Mailbox -ResultSize Unlimited -Filter {RecipientTypeDetails -eq "UserMailbox" -or RecipientTypeDetails -eq "SharedMailbox" -or RecipientTypeDetails -eq "RoomMailbox" -or RecipientTypeDetails -eq "DiscoveryMailbox"} | Set-Mailbox -AuditEnabled $true -AuditLogAgeLimit 180 -AuditAdmin Update, MoveToDeletedItems, SoftDelete, HardDelete, SendAs, SendOnBehalf, Create, UpdateFolderPermission -AuditDelegate Update, SoftDelete, HardDelete, SendAs, Create, UpdateFolderPermissions, MoveToDeletedItems, SendOnBehalf -AuditOwner UpdateFolderPermission, MailboxLogin, Create, SoftDelete, HardDelete, Update, MoveToDeletedItems 

#Double-Check It!
Get-Mailbox -ResultSize Unlimited | Select Name, AuditEnabled, AuditLogAgeLimit | Out-Gridview

Я вручную запустил этот скрипт, получив имя администратора и пароль для всех наших клиентов, что заняло очень много времени.

Есть ли способ запустить этот сценарий для всех наших арендаторов без необходимости вручную входить в систему как каждый из PowerShell партнерского центра или другого решения?

1 Ответ

0 голосов
/ 05 ноября 2018

Итак, насколько я могу судить, на основе комментариев, которые вы ищете, получите пароли от Thycotic Server и передайте их в ваш скрипт.

Я написал функцию для этого некоторое время назад. Имеются обязательные поля -WebService, -Credential и -SearchTerm

function Get-Secret{
    Param (
        [Parameter(Mandatory=$False)]
        [string] $WebService,
        [Parameter(Mandatory=$True)]
        [pscredential] $Credential,
        [string] $Organization = $Null,
        [Parameter(Mandatory=$True)]
        [string] $SearchTerm = $Null,
        [Parameter(ParameterSetName='Only',Mandatory=$false)]
        [switch] $CountOnly,
        [Parameter(ParameterSetName='Only',Mandatory=$false)]
        [switch] $SummeryOnly,
        [switch] $Raw
    )

    $Service = New-WebServiceProxy -uri $WebService -UseDefaultCredential
    $LoginResult = $Service.Authenticate($($Credential.GetNetworkCredential().Username), $($Credential.GetNetworkCredential().Password), $Organization, $($Credential.GetNetworkCredential().Domain))
    if($LoginResult.errors){
        throw $LoginResult.errors
        return
    }

    $Secret_IDs = $Service.SearchSecrets($LoginResult.token, $searchTerm, $true, $true)
    if($Secret_IDs.errors){
        throw $Secret_IDs.errors
        return
    }

    if($CountOnly){
        return $Secret_IDs.SecretSummaries.count
    }
    if($SummeryOnly){
        return $Secret_IDs.SecretSummaries
    }

    $Response = @()
    foreach($Secret_ID in $Secret_IDs.SecretSummaries){
        $Secret = $Service.GetSecret($LoginResult.token, $Secret_ID.SecretID, $false, $null).secret
        $Response += $Secret
    }

    if($Raw){
        return $Response
    }else{
        return $Response | Foreach-object{
            Write-Output "$($_.Name)"
            Foreach($item in $_.Items){
                Write-Output "$($item.FieldDisplayName) : $($item.Value)"
            }
            Write-Output "`r`n"
        }
    }
}

имеет самое основное использование как

Get-Secret -WebService "PlaceWebServiceAddressHere" -Credential $(get-Credential)  -SearchTerm "SearchString"

Веб-сервис является сервисом Soap и будет зависеть от того, как вы входите в Thycotic. Что-то вроде https://{YourBaseThycoticAddress}/webservices/sswebservice.asmx

с помощью параметра -raw вы можете получить прямой объект, возвращаемый из Thycotic

Get-Secret -WebService "PlaceWebServiceAddressHere" -Credential $(get-Credential)  -SearchTerm "SearchString" -raw

Этот объект вы можете сузить до любого поля, которое вы ищете (в данном случае имя пользователя)

Get-Secret -WebService "PlaceWebServiceAddressHere" -Credential $ThycoticCredentials  -SearchTerm $_ -Raw | select -ExpandProperty Items | ?{$_.fieldname -like 'username'}

даже получить значение

Get-Secret -WebService "PlaceWebServiceAddressHere" -Credential $ThycoticCredentials  -SearchTerm $_ -Raw | select -ExpandProperty Items | ?{$_.fieldname -like 'username'} | Select -expandProperty Value

Итак, ваш финальный скрипт должен выглядеть примерно так:

function Get-Secret{
    Param (
        [Parameter(Mandatory=$False)]
        [string] $WebService,
        [Parameter(Mandatory=$True)]
        [pscredential] $Credential,
        [string] $Organization = $Null,
        [Parameter(Mandatory=$True)]
        [string] $SearchTerm = $Null,
        [Parameter(ParameterSetName='Only',Mandatory=$false)]
        [switch] $CountOnly,
        [Parameter(ParameterSetName='Only',Mandatory=$false)]
        [switch] $SummeryOnly,
        [switch] $Raw
    )

    $Service = New-WebServiceProxy -uri $WebService -UseDefaultCredential
    $LoginResult = $Service.Authenticate($($Credential.GetNetworkCredential().Username), $($Credential.GetNetworkCredential().Password), $Organization, $($Credential.GetNetworkCredential().Domain))
    if($LoginResult.errors){
        throw $LoginResult.errors
        return
    }

    $Secret_IDs = $Service.SearchSecrets($LoginResult.token, $searchTerm, $true, $true)
    if($Secret_IDs.errors){
        throw $Secret_IDs.errors
        return
    }

    if($CountOnly){
        return $Secret_IDs.SecretSummaries.count
    }
    if($SummeryOnly){
        return $Secret_IDs.SecretSummaries
    }

    $Response = @()
    foreach($Secret_ID in $Secret_IDs.SecretSummaries){
        $Secret = $Service.GetSecret($LoginResult.token, $Secret_ID.SecretID, $false, $null).secret
        $Response += $Secret
    }

    if($Raw){
        return $Response
    }else{
        return $Response | Foreach-object{
            Write-Output "$($_.Name)"
            Foreach($item in $_.Items){
                Write-Output "$($item.FieldDisplayName) : $($item.Value)"
            }
            Write-Output "`r`n"
        }
    }
}


$SearchTerms = @("CompanyOne","CompanyTwo")
$ThycoticCredentials = Get-Credentials

$SearchTerms | %{
    Get-Secret -WebService "PlaceWebServiceAddressHere" -Credential $ThycoticCredentials  -SearchTerm $_ -Raw | select -ExpandProperty Items
    $Username = $Obj | ?{$_.fieldname -like 'username'} | select -ExpandProperty value
    $Password = $Obj | ?{$_.fieldname -like 'password'} | select -ExpandProperty value
    $UserCredential = New-Object pscredential($Username,$Password)

    $ExoSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $userCredential -Authentication Basic -AllowRedirection
    Import-PSSession $ExoSession

    #Enable global audit logging
    Get-Mailbox -ResultSize Unlimited -Filter {RecipientTypeDetails -eq "UserMailbox" -or RecipientTypeDetails -eq "SharedMailbox" -or RecipientTypeDetails -eq "RoomMailbox" -or RecipientTypeDetails -eq "DiscoveryMailbox"} | Set-Mailbox -AuditEnabled $true -AuditLogAgeLimit 180 -AuditAdmin Update, MoveToDeletedItems, SoftDelete, HardDelete, SendAs, SendOnBehalf, Create, UpdateFolderPermission -AuditDelegate Update, SoftDelete, HardDelete, SendAs, Create, UpdateFolderPermissions, MoveToDeletedItems, SendOnBehalf -AuditOwner UpdateFolderPermission, MailboxLogin, Create, SoftDelete, HardDelete, Update, MoveToDeletedItems 

    #Double-Check It!
    Get-Mailbox -ResultSize Unlimited | Select Name, AuditEnabled, AuditLogAgeLimit | Out-Gridview
}

при условии, что вы ввели правильные условия поиска, сужающие его до одного пользователя. и поля в Thycotic являются Имя пользователя и Пароль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...