#powershell #zip #compression
Вопрос:
Очень ново здесь, кто-нибудь проверит мой PS, чтобы узнать, сжимаю ли я 2 файла с оптимальной скоростью? Это занимает несколько секунд, когда я вхожу в систему через mstsc, но это происходит очень медленно (в приведенном ниже примере файлы такие маленькие, но я хочу заархивировать около 600 МБ с 2 файлами).:
$compress = @{
Path = "\servernamec$UsersPublicDocuments1.txt", "\servernamec$UsersPublicDocuments2.txt"
CompressionLevel = "Fastest"
DestinationPath = "\Servernamec$temp.zip"}
Compress-Archive @compress
Комментарии:
1. Это связано с характером того, как работает удаленное взаимодействие. Попробуйте вызвать его на удаленном компьютере, чтобы избежать сериализации/десериализации.
2. @AbrahamZinala Это не имеет ничего общего с удаленным подключением. Доступ к общим ресурсам UNC-это медленное действие.
3. @MaximilianBurszley, UNC-пути-это форма удаленного взаимодействия.
4. @AbrahamZinala В контексте PowerShell (тег, на котором основан этот вопрос), Удаленное взаимодействие как тема почти всегда относится к PSRemoting (WinRM). Здесь не происходит сериализации, все дело в сетевом трафике.
5. @MaximilianBurszley, powershell по умолчанию использует WinRM, но это не единственное удаленное взаимодействие для него. Я использую протоколы DCOM для большей части своего удаленного взаимодействия, все еще являющегося формой удаленного взаимодействия. Единственная проблема, которую я действительно вижу, заключается в том, что пунктом назначения все еще является другой путь UNC. Вероятно, было бы лучше сделать все это на удаленном сервере, а затем скопировать его? Движение может быть даже быстрее. Сериализация происходит с самим командлетом, а не с путями UNC.
Ответ №1:
Используется Invoke-Command
для выполнения Compress-Archive
на удаленном сервере (так же, как вы описали с помощью RDP):
Invoke-Command -ComputerName Servername {
$compress = @{
Path = 'C:UsersPublicDocuments1.txt','C:UsersPublicDocuments2.txt'
CompressionLevel = 'Fastest'
DestinationPath = 'C:temp.zip'
}
Compress-Archive @compress
}
Комментарии:
1. Еще раз спасибо Матиасу — у него были проблемы с этим. Я получаю ответ, что Сжатие-Архив не распознается как имя командлета, функции и т. Д
2. @ChristopherRetford Какая версия Windows запущена на удаленном сервере? Возможно, вам захочется обновить PowerShell (установить Windows Management Framework 5.1).
3. Модуль может не загружаться
4. @MathiasR.Jessen Я только что установил платформу управления Windows и presto, которая сработала. Это сократило этот процесс примерно на 7 минут. Спасибо, Саган