PowerShell StartProcess: неверный дескриптор - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь установить Google Chrome на удаленную машину через powershell.Это то, что я пытаюсь сделать (я в значительной степени только что собрал это вместе с парой других постов на разных сайтах):

$Path = $env:TEMP; 

$Installer = "chrome_installer.exe";

(new-object System.Net.WebClient).DownloadFile('http://dl.google.com/chrome/install/375.126/chrome_installer.exe', "$Path\$Installer");

Start-Process -FilePath $Path\$Installer -Args "/silent /install" -Verb RunAs -Wait;

Remove-Item $Path\$Installer 

это терпит неудачу в четвертой строке: Start-Process -FilePath $Path\$Installer -Args "/silent /install" -Verb RunAs -Wait;

с ошибкой:

Start-Process : This command cannot be run due to the error: The handle is 
 invalid.
At line:1 char:2
+  Start-Process -FilePath $Path\$Installer -Args "/silent /install" -V ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOp 
   erationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.C 
   ommands.StartProcessCommand

Я довольно неопытен с PowerShell, и мне трудно понять, что такое "ручка" в ошибке.Любая помощь приветствуется:)

РЕДАКТИРОВАТЬ: с try/catch { $_ | FL * -Force} вокруг сбойной команды, она выдает следующее:

PSMessageDetails      : 
Exception             : System.InvalidOperationException: This command cannot 
                        be run due to the error: The handle is invalid.
                           at System.Management.Automation.MshCommandRuntime.Th
                        rowTerminatingError(ErrorRecord errorRecord)
TargetObject          : 
CategoryInfo          : InvalidOperation: (:) [Start-Process], 
                        InvalidOperationException
FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands
                        .StartProcessCommand
ErrorDetails          : 
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : at <ScriptBlock>, <No file>: line 4
PipelineIterationInfo : {}

С перехватом $ _. Вместо этого вместо исключенияДает:

Message        : This command cannot be run due to the error: The handle is 
             invalid.
Data           : {}
InnerException : 
TargetSite     : Void ThrowTerminatingError(System.Management.Automation.ErrorR
                 ecord)
StackTrace     :    at System.Management.Automation.MshCommandRuntime.ThrowTerm
                 inatingError(ErrorRecord errorRecord)
HelpLink       : 
Source         : System.Management.Automation
HResult        : -2146233079

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Повышение

Для сценария потребуется повышение прав.Чтобы прочитать об удаленном повышении прав: https://ss64.com/ps/syntax-elevate.html

Если вы используете Invoke-Command для запуска сценария или команды на удаленном компьютере, он не будет запускаться с повышенными правами, даже если локальный сеанс установлен.Это связано с тем, что любой запрос на повышение прав произойдет на удаленном компьютере в неинтерактивном сеансе, и поэтому произойдет сбой.

Использование Enter-PSSession для запуска всего нового сеанса будет поддерживать повышение прав, если вы укажете CredSSP, который включаетделегирование учетных данных пользователя:

New-PSSession ss64dom.com -Auth CredSSP -cred ss64dom\user64

идентификатор зоны

Сценарий может быть заблокирован маркером идентификатора зоны Интернета.

Источник: http://woshub.com/how-windows-determines-that-the-file-has-been-downloaded-from-the-internet/

В PowerShell 3.0 вы можете отобразить список файлов с потоком Zone.Identifier в каталоге с помощью этой команды:

Get-ChildItem -Recurse | Get-Item -Stream Zone.Identifier -ErrorAction SilentlyContinue | Select-Object FileName

Атрибут удаляется следующим образом:

Remove-Item .\install-file.exe -Stream Zone.Identifier

В Windows PowerShell 4.0 вы можете удалить Zone.Identifier с помощью отдельного командлета:

Unblock-File install-file.exe

Добавление: Remove-Item вызовет ошибку, если не найдет альтернативный поток.Поэтому используйте:

Remove-Item $Path\$Installer -Stream Zone.Identifier -ErrorAction SilentlyContinue

0 голосов
/ 12 июня 2018

Насколько я могу судить, все сводится к тому, что в средах Azure Web App у вас нет прав для бесплатной установки приложений.

Я полагаю, что управление средой ограничено, поэтому ониможет гарантировать определенный уровень обслуживания.

Подробнее об этом можно прочитать здесь:

https://docs.microsoft.com/en-us/azure/app-service/choose-web-site-cloud-service-vm

0 голосов
/ 05 июня 2018

попробуйте заключить в двойные кавычки FilePath, который вы вводите командой Start-Process, ИЛИ использовать $(Join-Path $Path $Installer)

Прямо сейчас вы экранируете $ for $ Installer, поэтому путь к файлу не может быть определен.

Start-Process -FilePath "$Path\$Installer" -Args "/silent /install" -Verb RunAs -Wait;

# OR (even better I think)

Start-Process -FilePath $(Join-Path $Path $Installer) -Args "/silent /install" -Verb RunAs -Wait;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...