Удаление офиса - PullRequest
       13

Удаление офиса

0 голосов
/ 11 октября 2018

В настоящее время я пытаюсь запустить командный файл в качестве сценария запуска, чтобы обнаружить и удалить любую версию офиса, которую установил пользователь, а затем установить Office 365. Однако у меня работает установка, когда я пытался удалить Office 2013Я получил следующую ошибку:

Ошибка ввода: не удается найти файл сценария "C: \ Windows \ OffScrub_O15msi.vbs"

Файл Offscrub находится в том же местекак сценарий, кто-то может сказать мне, почему он ищет его в C: \ Windows?

Обновление

Пожалуйста, найдите мой текущий скрипт, который сейчасработает для Office 2013, я ранее добавил строку Remove2016Installs $true при использовании -Command для удаления Office 2016, это сработало.Поскольку с помощью -File для решения моей первоначальной проблемы я не смог получить сценарий для удаления Office 2016 и хотел бы получить несколько советов о том, как это сделать, я прочитал, что любая команда после -File должна бытьпоследнее, что, как мне кажется, может быть причиной сбоя.

Ниже приведен мой полный сценарий:

start "----NOTICE----" cmd.exe /t:ec /Q /k "echo OFFICE 365 IS BEING INSTALLED. THIS WINDOW WILL CLOSE WHEN COMPLETE&&prompt $h"
@echo off
pushd "%~dp0"

powershell.exe -executionpolicy bypass -NoExit -File "Remove-PreviousOfficeInstalls.ps1" 

popd

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT "\\domain\SYSVOL\domain\Policies\{Policy Number}\Machine\Scripts\Startup\setup.exe" /configure "\\domain\SYSVOL\domain\Policies\{Policy Number}\Machine\Scripts\Startup\configuration-Office365-x86.xml"
if %OS%==64BIT "\\domain\SYSVOL\domain\Policies\{Policy Number}\Machine\Scripts\Startup\setup.exe" /configure "\\domain\SYSVOL\domain\Policies\{Policy Number}\Machine\Scripts\Startup\configuration-Office365-x64.xml"
taskkill /IM cmd.exe /FI "WINDOWTITLE EQ ----NOTICE----"
taskkill /IM cmd.exe /FI "WINDOWTITLE EQ Administrator: ----NOTICE----"
echo %date% %time% Setup ended with error code %errorlevel%. >> %LogLocation%\%computername%.txt

Обновление завершено

Естьстрока, которая вызывает скрипт Powershell Remove-PreviousOfficeInstalls, это файл из GitHub, который очень популярен для удаления любой версии Office, которую вы установили.

Я могу запустить эту команду, если скажу, что скопировал эти файлы врабочий стол и измените расположение в сценариях, я не уверен, что это ссылка на C: \ Windows, хотя при запуске из \ domain \ SYSVOL \ domain \ Policies {Policy Number} \ Machine \ Scripts \ Startup \?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

спасибо за вашу помощь по этому поводу.Я решил использовать следующую команду летучей мыши:

`start "----NOTICE----" cmd.exe /t:ec /Q /k "echo OFFICE 365 IS BEING INSTALLED. THIS WINDOW WILL CLOSE WHEN COMPLETE&&prompt $h"`

@echo off

pushd "%~dp0"

powershell.exe -executionpolicy bypass -File Remove-PreviousOfficeInstalls.ps1 -Remove2016Installs

popd

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT "\\Server\Folder\Folder\setup.exe" /configure "\\Server\Folder\Folder\configuration-Office365-x86.xml" if %OS%==64BIT "\\Server\Folder\Folder\setup.exe" /configure "\\Server\Folder\Folder\configuration-Office365-x64.xml" taskkill /IM cmd.exe /FI "WINDOWTITLE EQ ----NOTICE----" taskkill /IM cmd.exe /FI "WINDOWTITLE EQ Administrator: ----NOTICE----" echo %date% %time% Setup ended with error code %errorlevel%. >> %LogLocation%\%computername%.txt

Мне пришлось изменить сценарий powershell Remove-PreviousOfficeInstalls, включив в него команду переключения:

[Parameter(ValueFromPipelineByPropertyName=$true)] [switch]$Remove2016Installs = $false,

Затем он сделал именно то, что мне было нужно, он обнаружил текущую версию Office, удалил ее и установил правильную битовую версию Office 365 для этого ПК \ ноутбука.

Спасибо за вашу помощь

0 голосов
/ 11 октября 2018

Если вы запускаете экземпляры PowerShell по умолчанию, они всегда запускаются в определенном каталоге.Это зависит от того, как и кем это началось.Например, административная оболочка PowerShell обычно запускается в C: \ Windows \ System32.Если вы используете любые пути, которые не являются абсолютными, они применяются относительно этого каталога.

Чтобы обойти это, вам нужно изменить каталог, который он использует.Например, используя cd, чтобы изменить каталог.Я полагаю, что ваш скрипт Remove-PreviousOfficeInstalls.ps1 содержит относительный вызов VBS.

Простым решением было бы запустить блок скрипта вместо одной команды и просто cd до \\domain\SYSVOL\domain\Policies\'{Policy Number}'\Machine\Scripts\Startup\ дозапуск ps1.

Справка PowerShell, которую вы можете просмотреть, перейдя по [этой] ссылке, или запуск powershell -h содержит следующую информацию относительно использования переключателя -Command.

...

Блоки скриптов должны быть заключены в фигурные скобки ({}).Вы можете указать блок скрипта только при запуске PowerShell.exe в PowerShell.Если вы хотите использовать блок скрипта при запуске из другой оболочки, вы должны использовать формат:

"& {}"

...

ДругойВажным параметром для вашего варианта использования является -File.

Запускает указанный сценарий в локальной области («точка-источник»), так что функции и переменные, которые создает сценарий, доступны втекущая сессия.Введите путь к файлу сценария и любые параметры.

...

Ваша партия содержит следующую строку:

powershell.exe -executionpolicy bypass -Command "\\domain\SYSVOL\domain\Policies\'{Policy Number}'\Machine\Scripts\Startup\Remove-PreviousOfficeInstalls.ps1 -Remove2016Installs $true"

Вы запускаете одинКоманда для вызова скрипта с параметром.Проблема заключается в том, что указанный скрипт проверяет свои местоположения на основе определенной функции и при вашем вызове это местоположение обнаруживается неправильно.

Существует несколько способов исправить это.Можно было бы изменить каталог, прежде чем вызывать скрипт.Для этого вам нужно использовать блок скрипта в качестве параметра для -Command.Примером этого может быть:

powershell.exe -Command "& {Write-Output 'Hello'; Write-Output 'World';}"

Как видите, выполняются две независимые команды Write-Output.Вы бы изменили это на cd \\domain\SYSVOL\domain\Policies\'{Policy Number}'\Machine\Scripts\Startup\ и вызов вашего скрипта.В качестве бонуса вам больше не нужно указывать весь путь перед сценарием.

Другой вариант - запустить powershell -File с вашим текущим вызовом сценария.Это также должно означать, что сценарий считывается из файла и соответствующие параметры заполняются соответствующим образом.

Если ни один из этих параметров не работает, вам нужно будет проверить, что заполняется $PSScriptRoot и / или чтовозврат (Get-Item -Path ".\").FullName - это две команды, используемые для определения местоположения выполняемого скрипта.Для этого вы можете использовать блок скрипта.

...