вторник, 11 февраля 2020 г.

Восстанавливаем передачу файлов в Skype

Так получилось, что в компании, которую я обслуживаю, пользователи очень любят вести переписку с контрагентами в Skype, и - что для меня совсем непонятно - обмениваться с ними рабочими файлами в нём же. Я совсем не сторонник обмена файлами в любом IM-мессенджере - для этого есть проверенный и надёжный инструмент - электронная почта, которая на этой компании своя, но - тут проще с пользователями согласиться, ведь обмен сообщениями в Skype - это быстро и удобно, а электронная почта - какая такая почта?

Вопрос в том, что иногда Skype начинает капризничать и отказывается принимать и передавать файлы - а что ещё можно ждать от приложения обмена сообщениями от Microsoft? Пользователям работать становится не так удобно, начинаются вопросы " А почему у меня файлы не принимаются? Надо срочно-важно-прямо сейчас-вчера".

Skype сломался...
 Оказывается, починить Skype можно довольно просто.

Для восстановления работы Skype достаточно в профиле пользователя переименовать папку "%APPDATA%\Microsoft\_Skype for Desktop\" - если всё заработает, а так скорее всего и будет - то потом её можно будет удалить, и перезапустить Skype. Правда, тут возникает ещё один вопрос - пользователь должен помнить логин и пароль, а так бывает далеко не всегда, когда-нибудь я напишу про удобное создание и сохранение паролей к чему угодно. 

Итак, решение простое и понятное, осталось сделать его удобным для пользователей, в итоге родился небольшой скрипт на PowerShell, который можно положить в общую папку в локальной сети и ярлык раздать пользователям в удобное место, например, в папку на рабочий стол.

<#
.SYNOPSIS
Скрипт для восстановления работы Skype for desktop - например, когда не передаются файлы.
.DESCRIPTION
Для восстановления настроек останавливается Skype, переименовывается папка "%APPDATA%\Microsoft\_Skype for Desktop\", запускается Skype.
Если есть ранее переименованная папка - удаляем её без предупреждения.
Пользователь должен помнить логин и пароль.
.EXAMPLE
Чтобы скрыть окно PowerShell - можно запускать командой powershell -WindowStyle Hidden -File \\server\share\fix_skype.ps1
.INPUTS
.OUTPUTS
.NOTES
Имя файла: fix_skype.ps1
Автор: Ярошевич Максим (maximyn@gmail.com, yaromax.blogspot.com)
Требования: PowerShell V2 over Vista and upper.
Copyright 2020: Ярошевич Максим maximyn@gmail.com
#>
# Выводим окно выбора действий, предупреждаем пользователя
# Про окна и обработку кнопок https://winitpro.ru/index.php/2018/10/02/uvedomleniya-polzovateley-is-powershell/
# Проверяем наличие Skype для рабочего стола, если нет - выводим сообщение и завершаем работу.
$isfile = Test-Path -Path "C:\Program Files (x86)\Microsoft\Skype for Desktop\Skype.exe"
if ($null -eq $isfile) {
[system.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null
$balloon = New-Object System.Windows.Forms.NotifyIcon
$path = Get-Process -id $pid | Select-Object -ExpandProperty Path
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.Icon = $icon
# значок, текст и заголовок
$balloon.BalloonTipIcon = 'Info'
$balloon.BalloonTipText = 'На этом компьютере не установлен Skype для рабочего стола, завершена работа скрипта'
$balloon.BalloonTipTitle = 'Skype для рабочего стола не установлен.'
$balloon.Visible = $true
$balloon.ShowBalloonTip(10000)
exit
}
$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("Восстановление работы Skype для рабочего стола. `n`n Для продолжения нажмите Да, для выхода Нет. `n `n Возможно, после запуска Skype надо будет ввести логин и пароль.", 0, "Восстановление работы Skype для рабочего стола", 4 + 32)
# Проверяем, запущен ли Skype
$skype = Get-Process -Name Skype -ErrorAction SilentlyContinue
# Если нажато "Да" - завершаем Skype, переименовываем папку, выводим сообщение в трее.
# Нажатие "Нет" не обрабатывается, скрипт просто завершает работу.
if ($Output -eq 6) {
if ($null -ne $skype) {
Stop-Process -Name Skype -ErrorAction SilentlyContinue
}
if (Test-Path -Path "$env:APPDATA\Microsoft\_Skype for Desktop\") {
Remove-Item "$env:APPDATA\Microsoft\_Skype for Desktop\"
}
Rename-Item "$env:APPDATA\Microsoft\Skype for Desktop\" "_Skype for Desktop" -ErrorAction SilentlyContinue
& "C:\Program Files (x86)\Microsoft\Skype for Desktop\Skype.exe"
[system.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null
$balloon = New-Object System.Windows.Forms.NotifyIcon
$path = Get-Process -id $pid | Select-Object -ExpandProperty Path
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.Icon = $icon
# значок, текст и заголовок
$balloon.BalloonTipIcon = 'Info'
$balloon.BalloonTipText = 'Skype для рабочего стола запущен, настройки восстановлены - проверяем работу.'
$balloon.BalloonTipTitle = 'Готово'
$balloon.Visible = $true
$balloon.ShowBalloonTip(10000)
}
view raw fix_skype.ps1 hosted with ❤ by GitHub

Архив с готовым файлом можно скачать по ссылке.

В итоге пользователи могут сами восстанавливать работу Skype, не дёргая системного администратора.



0 коммент. :

Отправить комментарий