Как правильно собрать функцию в Powershell - PullRequest
1 голос
/ 17 марта 2019

Я провел тонну исследований о том, как перенести этот EXE-файл на удаленный ПК, используя PSSession, и все строки кода работают при выполнении построчно. Но мне было тяжело поместить это в функцию, которая имеет смысл, выполнит все строки кода и успешно установит программное обеспечение одним нажатием кнопки. Не уверен, что происходит. Он установит исполняемый файл локально, когда я попытаюсь поместить все строки кода в функцию и запустить ее. Не могли бы вы помочь проинструктировать, что я делаю неправильно? Извините, я новичок в Powershell.

  $dc1 = New-PSSession -ComputerName DC1
  Copy-Item C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe -Destination C:\TPAdmin -ToSession $dc1
  Enter-PSSession -Session $dc1
  Invoke-Command -ScriptBlock {C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe /VERYSILENT /LOG="C:\SOFTWAREINSTALL.LOG" 
 Remove-Pssession $dc1

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Enter-PSSession предназначен для интерактивно используется только , поэтому не подходит для использования в функции . [1]

Вместо использования Enter-PSSession, передает созданный вами сеанс с New-Session параметру -Session команды Invoke-Command , который будет запускать команду в контексте этого (удаленного ) сеанс.

# Define your function...
function Invoke-InstallerRemotely {
  param([string] $ComputerName)
  $session = New-PSSession -ComputerName $ComputerName
  Copy-Item C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe -Destination C:\TPAdmin -ToSession $session
  # Do NOT use Enter-PSSession.
  # Pass your session to Invoke-Command with -Session
  Invoke-Command -Session $session -ScriptBlock {C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe /VERYSILENT /LOG="C:\SOFTWAREINSTALL.LOG" 
  Remove-PSSession $session
}

# ... then invoke it.
# Note that functions must be defined *before* they're called.
Invoke-InstallerRemotely -ComputerName DC1

[1] Использование его в функции означает, что на целевом компьютере введен интерактивный сеанс , который необходимо выйти в интерактивном режиме (набрав и отправив exit или Exit-PSSession) до выполнения остальных операторов в функции, снова локально .

0 голосов
/ 17 марта 2019

Что касается ...

Извините, я новичок в Powershell.

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

  • Пожалуйста, не забудьте отформатировать свои сообщения, чтобы люди захотели помочь.Люди не одобряют этого.Копирование, вставка и переформатирование вашего сообщения - это дополнительная ненужная работа.; -} .Мы уже были там.

  • Мы не знаем, как вы набираете скорость на PowerShell, но используем свободно доступные ресурсы, чтобы ограничить / избежать всех заблуждений, разочарований, ошибокпотенциальные вредные привычки и т. д., с которыми вы столкнетесь.В прямом эфире смотрите видео:

  • YouTube

  • Виртуальная академия Microsoft
  • MSDN Channel9
  • Microsoft Learn
  • , а также Reference
  • и eBook ресурсов.

Вернуться к вашему варианту использования.Вы не говорите, что происходит.Итак, вы оставляете нас угадывать.Что не очень полезно для вас.

Тем не менее, вам просто нужно сделать это ... в PowerShell v5x, так как требуется использовать аргумент -ToSession.

$DC1 = New-PSSession -ComputerName 'DC1'
Copy-Item -ToSession $DC1 -Path 'C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe' -Destination 'C:\TPAdmin'
Invoke-Command -Session $DC1 -ScriptBlock {C:\TPAdmin\Greenshot-INSTALLER-1.2.10.6-RELEASE.exe /VERYSILENT /LOG="C:\SOFTWAREINSTALL.LOG"}
Remove-PSSession -Session $DC1

Я не уверен, почему вы это делаете Введите-PSSsssion в команде New-PSSession , так как она не нужна.Он предназначен для автономных интерактивных сеансов.

Явное PSRemoting = Enter = PSSEssion

Неявное PSREmoting = New-PSSEssion

Если всеиначе у вас не получится выполнить копирование через сеанс, а затем просто используйте обычный способ UNC для копирования из источника в место назначения.

Copy-Item -Path 'C:\temp\Results.csv' -Destination "\\$($DC1.Computername)\c$\temp"

См. также: Копирование в или из сеанса PowerShell

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