Заархивируйте файл на удаленном сервере медленно, может кто-нибудь проверить мой PS

#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 минут. Спасибо, Саган