ضغط الملفات عن بعد باستخدام عملية بدء PowerShell وأمر الاستدعاء
-
27-10-2019 - |
سؤال
أريد أن أكون قادرًا على الدخول إلى النظام عن بُعد وضغط الملفات أو فك ضغطها هناك والحصول على إشارة العملية عند اكتمالها.تعمل عملية البدء مع المعلمة -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