PowerShell flux de travail d'échange Remoting

voix
3

Je tente d'extraire des données de Office 365 Exchange Online en parallèle pour gagner du temps. Je ne suis pas en mesure d'accomplir ce que je cherche à faire, le code suivant est le « plus proche » Je suis venu à ce jour.

Workflow Get-MailboxStatisticsParallel{
    param ($o365cred)

    $session = InlineScript {
        New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $using:o365cred -Authentication Basic -AllowRedirection
    }

    InlineScript {
        Invoke-Command -Session $session -ScriptBlock {Get-Mailbox Firstname Middleinitial. Lastname}
    }
}

J'ai défini deux scripts en ligne parce que je veux installer la session à distance une fois, mais ensuite appeler la commande Get-Mailbox en parallèle pour accélérer le processus. Voici un exemple de ce que je voudrais que le flux de travail pour ressembler.

Workflow Get-MailboxStatisticsParallel{
    param ($o365cred, $mailboxes)

    $session = InlineScript {
        New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $using:o365cred -Authentication Basic -AllowRedirection
    }

    ForEach -Parallel ($mailbox in $mailboxes){
        InlineScript {
            Invoke-Command -Session $using:session -ScriptBlock {param ($mailbox); Get-MailboxStatistics $mailbox.UserPrincipalName} -ArgumentList $mailbox
        }
    }

}

Une course exemple ressemblerait à ceci.

$cred = Get-Credential

$mailboxes = Get-Mailbox -ResultSize Unlimited

Get-MailboxStatisticsParallel -o365cred $cred -mailboxes $mailboxes

Voici les résultats typiques.

Invoke-Command : Cannot validate argument on parameter 'Session'. The argument is null or empty. Supply an argument that is not null or empty and then try 
the command again.
At Get-MailboxStatisticsParallel:7 char:7
+ 
    + CategoryInfo          : InvalidData: (:) [Invoke-Command], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand
    + PSComputerName        : [localhost]

Je peux voir l'objet de la session $ est désérialisée, je devine que c'est ma question. La question est de savoir comment puis-je établir une session de PowerShell à distance avec un flux de travail spécifiques Uri et ConfigurationName et tirer parti des fonctionnalités offrent?

Créé 18/06/2013 à 21:34
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
5

J'ai essayé de faire ce travail, mais ne l'ai pas trouvé un moyen.

Jeter un oeil à exécution les commandes Windows PowerShell dans un flux de travail , il dit: « Pour exécuter les commandes de l'activité InlineScript sur des ordinateurs distants, vous devez établir et gérer les connexions à l'ordinateur distant à l' intérieur du bloc InlineScript puis exécutez les commandes à distance. "

En supposant que je comprends cette déclaration correctement, je ne pense pas que vous pouvez établir une session en dehors du bloc InlineScript puis l'utiliser à l'intérieur du bloc. J'ai essayé plusieurs façons d'essayer de passer la session de $ dans le InlineScript, mais il est toujours $ null. Cette limitation fait sens pour moi parce que je ne vois pas comment un flux de travail peut utiliser une session à distance ou d'une connexion à exécuter simultanément plusieurs commandes sur le serveur distant. Je pense que vous allez avoir besoin de plusieurs connexions à distance pour exécuter plusieurs commandes à distance.

Je pense que vous êtes le meilleur pari sera d'établir une série de connexions à Office 365, puis utiliser des emplois pour exécuter des commandes en parallèle à l'aide de chacune des sessions.

Créé 20/06/2013 à 15:20
source utilisateur

voix
2
$using:sesssion has 3 s

changer pour

$using:session
Créé 12/11/2013 à 12:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more