ضغط الملفات عن بعد باستخدام عملية بدء PowerShell وأمر الاستدعاء

StackOverflow https://stackoverflow.com/questions/7329118

سؤال

أريد أن أكون قادرًا على الدخول إلى النظام عن بُعد وضغط الملفات أو فك ضغطها هناك والحصول على إشارة العملية عند اكتمالها.تعمل عملية البدء مع المعلمة -wait لتشغيل 7z.exe بشكل متزامن من PowerShell.عندما أحاول دمج ذلك مع أمر الاستدعاء لتشغيل نفس الأمر عن بعد، فإنه لا يحترم معلمة الانتظار وأعتقد أنه يقتل العملية لأنها تعود بسرعة ولا تنتج ملفًا مضغوطًا أبدًا.

[string]$sevenZip = "C:\Program Files\7-zip\7z.exe"
[Array]$arguments = "a", $zipFilename, $dirToZip;

"Starting $sevenZip with $arguments"
Start-Process $sevenZip "$arguments" -Wait
#blocks and waits for zip file to complete

لقد قمت في البداية بتجربة برنامج write-zip &توسيع الأرشيف PSCX، لكن الأخير غير متوافق مع تكوين .NET 4.0 ذو الإصدار 64 بت.والآن أحاول الاتصال بالإصدار 64 بت 7z.exe من خلال سطر الأوامر.أنا لا أتلقى أي أخطاء.يقوم PowerShell بالإبلاغ عن المهمة كحالة تشغيل ثم اكتمالها، ولا يتم إنشاء ملف مضغوط.

Invoke-Command -ComputerName localhost -FilePath 'C:\Scripts\ZipIt.ps1' -ArgumentList    'd:\TestFolder','d:\promote\TestFile.7z' -AsJob

نقدر أي مساعدة أو مؤشرات.

شكرا ، غريغوري

هل كانت مفيدة؟

المحلول

ومنذ سيتم استخدامها للبدء في عملية متزامن هنا، أود أن أوصي تجنب عليه، ومجرد استخدام للتنفيذ 7z.exe:

$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip a $zipFileName $dirToZip

وسيؤدي ذلك إلى منع طبيعي السيناريو الخاص بك حتى اكتمال 7ZIP وظيفتها.

نصائح أخرى

إن استخدام 7z.exe مباشرةً سيفي بالغرض.إذا وجدت أنك بحاجة إلى ذلك فك الضغط ملف محمي بكلمة مرور يمكنك استخدامه:

$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y  "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top