Если вы запускаете экземпляры 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
- это две команды, используемые для определения местоположения выполняемого скрипта.Для этого вы можете использовать блок скрипта.