Выполнить установку-удаление с сервера на удаленных компьютерах через PowerShell - PullRequest
1 голос
/ 07 октября 2019

Это мой первый вопрос, и я также довольно новичок в PowerShell, поэтому я надеюсь, что я все делаю хорошо.

Моя проблема заключается в следующем: я хочу удалить программу на нескольких компьютерах, проверьтеесли ключ реестра удален, а затем установить новую версию программы.

Установка расположена на сервере в том же домене, что и компьютеры.

Я хочу, чтобы мой сценарий циклически проходил по компьютерам и выполнял настройку с сервера для каждого компьютера. Поскольку я совсем новичок в PowerShell, я понятия не имею, как это сделать. Я подумал, возможно, использовать Copy-Item, но я не хочу действительно перенести установку, а просто выполнить ее с сервера на компьютеры? Есть идеи, как это сделать?

С уважением

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Можно попробовать следующий подход.

Обратите внимание, что необходимость явного предоставления учетных данных - это обходной путь для печально известной проблемы двойного прыжка .

# The list of computers on which to run the setup program.
$remoteComputers = 'computer1', 'computer2' # ...

# The full UNC path of the setup program.
$setupExePath = '\\server\somepath\setup.exe'

# Obtain credentials that can be used on the
# remote computers to access the share on which 
# the setup program is located.
$creds = Get-Credential

# Run the setup program on all remote computers.
Invoke-Command -ComputerName $remoteComputers {

    # WORKAROUND FOR THE DOUBLE-HOP PROBLEM:
    # Map the target network share as a dummy PS drive using the passed-through
    # credentials.
    # You may - but needn't - use this drive; the mere fact of having established
    # a drive with valid credentials makes the network location accessible in the
    # session, even with direct use of UNC paths.
    $null = New-PSDrive -Credential $using:cred dummy -Root (Split-Path -Parent $using:$setupExePath) -PSProvider FileSystem

    # Invoke the setup program from the UNC share.
    & $using:$setupExePath

    # ... do other things

} 
0 голосов
/ 07 октября 2019

Пока серверы находятся в одном домене, вы можете добиться этого, выполнив следующие действия:

$app = Get-WmiObject -Class Win32_Product | Where-Object { 
    $_.Name -match "Software Name" 
}

$app.Uninstall()

Чтобы перенаправить это на удаленный сервер / компьютер

Invoke-Command -FilePath <FilePath> -ComputerName <hostname>

Этоудалит программное обеспечение с машины и позволит вам при необходимости направить его на имя хоста.

Отсюда просто бросьте его во вложенный цикл и добавьте .csv с именами компьютеров для циклического просмотра.

Foreach($Computer in $Computers){

Invoke-Command -FilePath <FilePath> -ComputerName $Computer

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...