2016-10-31 4 views
1

Переменная в верхней части скрипта определяет несколько команд/переменных для New-PSDrive, а также подключение и установку. После этого создается функция для открытия текстового файла и извлечения из него информации. Я знаю, что эта часть работает, потому что я использую ее в двух других сценариях. Наконец, скрипт выполняет команды в первой переменной.Установить программу удаленно с помощью Invoke-Command

Скрипт будет отображаться как работает успешно, но проверка удаленного компьютера показывает, что ничего не произошло.

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

  • позволяет 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 начинается на машине, но блокнота никогда не делает. Что я делаю не так?

ответ

3

Ответ довольно прост здесь. Весь ваш сценарий ничтожно, если вы не сообщите командлету Invoke-Command, на каком компьютере вы хотите выполнить код. Поскольку вы просто повторяете цикл и вызываете эту команду X раз на локальном компьютере. Вам необходимо изменить эту секунду на последнюю строку, чтобы указать машину для выполнения кода:

Invoke-Command $eAudIT2014V2Install -ComputerName $computer 
+0

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

+0

Не забывайте, что команды powershell запускаются под вашим собственным сеансом. Таким образом, вошедший в систему пользователь не увидит, что вы делаете, так как это разные сеансы. Если вы посмотрите в диспетчере задач во всех процессах, вы, вероятно, увидите, что блокнот запущен. Если вы хотите открыть блокнот на удаленном компьютере, который виден зарегистрированному пользователю, одним из способов, которым вы могли бы это сделать, было бы запланированное задание. – kfordham281

Смежные вопросы