Аргументы для автоматической установки Visual Studio с настраиваемым путем установки и компонентов через Powershell

Все новое для Powershell и попытка написать сценарий, который может выполнять автоматическую установку Visual Studio 2017 на удаленном сервере с настраиваемым путем установки и настраиваемыми компонентами с помощью Invoke-Command и его параметра -ScriptBlock. Можно установить визуальную студию в автоматическом режиме, но без указания пути установки и списка настраиваемых компонентов, поскольку я не уверен, как передавать аргументы для этого. Пробовал различные Пилы, нигде не помогло.

парам (

    $session = "New-PSSession -ComputerName $server -Credential $mycredentials",
    $SourceFile = "\\server\D$\Somefolder\vs.exe",
    $Destination = "D:\Somefolder\"
    )


Write-Host "Installing Visual Studio"

Copy-Item -FromSession $session -Path $SourceFile -Destination $destination -Force

Invoke-Command -Session $session -ScriptBlock { Start-Process $Destination\vs.exe -ArgumentList '--quiet', '--installPath "C\VS\"' -Wait

    }

      Exit-PSSession

Пробовал разные варианты пути установки, например --installPath "D: \ Somefolder \", -installPath "D: \ Somefolder \", -install 'D: \ Somefolder \', даже думал о передаче аргументов через переменную, но не уверен, как будет ли работать в этом сценарии. Следовательно, он приземлился здесь безуспешно и даже нигде не увидел помощи, характерной для этого сценария.

Я думаю, что $Destination\vs.exe ошибочен, потому что $ Destination уже заканчивается обратной косой чертой, поэтому вы получите D:\SomeFolder\\vs.exe. Чтобы избежать подобных вещей, лучше используйте $exeToRun = Join-Path $Destination "vs.exe" и используйте его (как в Start-Process -FilePath $exeToRun). Кроме того, ваш код показывает неверный путь для аргумента installPath. В нем отсутствует двоеточие, и он должен быть `C: \ VS`

Theo 13.07.2018 21:22

@Theo: Хотя использование Join-Path является хорошей рекомендацией, обратите внимание, что \\ (или //) в качестве разделителей в путях действительно работают.

mklement0 13.07.2018 22:02

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

Bender the Greatest 13.07.2018 22:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
653
1

Ответы 1

Попробуйте что-то вроде следующего (непроверенного) - обратите внимание на комментарии, относящиеся к тому, что вы пробовали:

param (
  # Use $(...) to use a command's output as a parameter default value.
  # By contrast assigning "..." only assigns a *string*.
  $session = $(New-PSSession -ComputerName $server -Credential $mycredentials),
  # To be safe, better to `-escape $ inside "..." if it's meant to be a literal.
  $SourceFile = "\\server\D`$\Somefolder\vs.exe",
  $Destination = "D:\Somefolder"
)

Write-Host "Installing Visual Studio"

Copy-Item -FromSession $session -Path $SourceFile -Destination $destination -Force

# You don't need the session anymore now that you've copied the file.
# Normally you'd call
#     Remove-PSSession $session
# However, given that the session may have been passed as an argument, the caller
# may still need it.

# With the installer present on the local machine, you can invoke
# Start-Process locally - no need for a session.
Start-Process -Wait $Destination\vs.exe -ArgumentList '--quiet', '--installPath "C:\VS"'

# No need for Exit-PSSession (which is a no-op here), given that 
# you haven't used Enter-PSSession.

Другие вопросы по теме