2010-11-12 25 views
12

J'ai essayé un certain nombre de manières différentes de faire ceci, elles ont toutes la même erreur. Voici une série de commandes:Comment puis-je faire fonctionner 7za.exe via Powershell Remoting?

$s = New-PSsession -ComputerName ServerA 
$job = Invoke-Command -Session $s -Scriptblock { Start-Process -FilePath  
    "C:\Scripts\ArchiveEventLogs\ver4.5\7za.exe" -ArgumentList "a", 
    "C:\Scripts\Eventlogs.bak\ServerA-20101111.7z", "C:\Scripts\Eventlogs.bak\*.evt*", 
    "-mx7", "-oC:\Scripts\Eventlogs.bak", "-wC:\Scripts\Eventlogs.bak", "-t7z" -Wait } 
    -AsJob 

Get-Job | Wait-Job 
Receive-Job Job$ 

La sortie que je reçois est la suivante:

7-Zip (A) 9.17 beta Copyright (c) 1999-2010 Igor Pavlov 2010-10-04 
Scanning 

Creating archive C:\Scripts\Eventlogs.bak\ServerA-20101111.7z 

ERROR: Can't allocate required memory! 

Comment puis-je obtenir passé cette erreur ???

Je devrais préciser, si je cours directement le Scriptblock sur ServerA sans le remoting, cela fonctionne. Merci pour toute aide!

Répondre

9

Les shells distants sont limités à 150 Mo de mémoire par défaut. Vous pouvez le modifier avec l'utilitaire de ligne de commande winrm sur le serveur; Je ne suis pas sûr si le powershell wsman: \ drive vous laissera changer cela interactivement parce que je pense que c'est une propriété générale de la fonctionnalité de plugin de shell dans winrm et pas directement connecté à powershell.

C:\Windows\system32>winrm get winrm/config/winrs 
Winrs 
    AllowRemoteShellAccess = true 
    IdleTimeout = 180000 
    MaxConcurrentUsers = 5 
    MaxShellRunTime = 2147483647 
    MaxProcessesPerShell = 15 
    **MaxMemoryPerShellMB = 150** 
    MaxShellsPerUser = 5 

La compression de gros fichiers est un processus gourmand en mémoire.

+2

Merci beaucoup. J'ai mis à jour mon GPO pour refléter un allotissement de mémoire plus élevé et cela a fonctionné! Au cas où quelqu'un en aurait besoin, l'emplacement du GPO est: Configuration de l'ordinateur -> Stratégies -> Modèles d'administration -> Composants Windows -> Windows Remote Shell -> Spécifier la mémoire maximale en Mo par Shell. Merci beaucoup! – Sean

6

Une autre solution consiste à modifier la configuration du shell distant Windows.

Vous pouvez exécuter ce qui suit dans une invite PowerShell sur le serveur distant:

Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048 

Ceci est particulièrement utile si vous ne voulez pas appliquer la modification via la stratégie de groupe.

Ps: Pour voir ce que la valeur actuellement configurée est d'essayer d'exécuter ce qui suit:

Get-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 
+0

merci pour l'alternative, beaucoup plus facile que de jouer avec GPO – sonjz