使用Invoke-Command远程安装程序

时间:2016-10-31 18:58:44

标签: powershell

脚本顶部的变量为New-PSDrive定义了几个命令/变量,以及连接和安装。 在此之后,创建一个函数来打开文本文件并从中提取信息。我知道这部分有效,因为我在其他两个脚本中使用它。 最后,脚本执行第一个变量中的命令。

脚本将显示为成功运行,但检查远程计算机显示没有任何反应。

在执行任何此类活动之前,远程计算机上有一个针对它运行的脚本:

  • 启用PSRemoting(设置防火墙规则并启动WinRM)和
  • 绕过执行政策。

完成这些步骤后,运行以下脚本安装一个软件。

$eAudIT2014V2Install = {
  $eAudIT2014V2password = ConvertTo-SecureString "PasswordHere" -AsPlainText -Force
  $eAudIT2014V2cred = New-Object System.Management.Automation.PSCredential('domain\user', $eAudIT2014V2password)
  $eAudIT2014V2drive = New-PSDrive -Name eAudIT2014V2 -PSProvider FileSystem -Root "\\Server\Share" -Credential $eAudIT2014V2cred
  $eAudIT2014V2job = Start-Job {"eAudIT2014V2:\Setup.cmd"}
  Wait-Job $eAudIT2014V2job
  Receive-Job $eAudIT2014V2job
}

Function Get-OpenFile($initialDirectory) {
  [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
    Out-Null

  $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
  $OpenFileDialog.InitialDirectory = $initialDirectory
  $OpenFileDialog.ShowDialog()
  $OpenFileDialog.Filename
  $OpenFileDialog.ShowHelp = $true
}

$InputFile = Get-OpenFile
if ($InputFile -eq "Cancel") {
  Write-Host "Canceled By User"
  exit
} else {
  $Computers = @(Get-Content -Path $InputFile)
}

foreach ($computer in $computers) {
  Write-Host "Installing eAudIT 2014V2 on Selected Computers"
  Invoke-Command $eAudIT2014V2Install
}

我注意到如果我告诉这个脚本运行像notepad.exe这样的基本内容,则会在机器上启动dllhost进程,但记事本从不这样做。我做错了什么?

1 个答案:

答案 0 :(得分:3)

答案很简单。如果您没有告诉Invoke-Command cmdlet您要在哪个计算机上执行代码,那么您的所有脚本都是徒劳的。因为它只是迭代循环并在本地计算机上多次调用该命令X次。您需要将第二行更改为最后一行,以指定要在其上执行代码的计算机:

Invoke-Command $eAudIT2014V2Install -ComputerName $computer