Выполнение FolderBrowserDialog в powershell из клиентского браузера с использованием JavaScript - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь вызвать какое-то диалоговое окно выбора папки, у меня есть рабочая модель с nodejs и powershell, но она работает только тогда, когда сервер и клиент находятся на одной машине. Мне нужно, чтобы приглашение появилось на стороне клиента при запуске из браузера. Из того, что я понимаю, я не могу вызвать Powershell от Chrome? Так есть альтернатива или я просто облажался?

Мой текущий скрипт Powershell

{
    param([string]$Description="Select Folder",[string]$RootFolder="Desktop")

 [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
     Out-Null     

   $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
        $objForm.Rootfolder = $RootFolder
        $objForm.Description = $Description
        $Show = $objForm.ShowDialog()
        If ($Show -eq "OK")
        {
            Return $objForm.SelectedPath
        }
        Else
        {
            Write-Error "Operation cancelled by user."
        }
    }

$folder = Select-FolderDialog # the variable contains user folder selection
write-host $folder

Моя функция JavaScript


async function asyncfindDir() {
          //executes powershell script
       let promise = new Promise((resolve, reject) => {
        const Shell = require('node-powershell');
        const ps = new Shell({
          executionPolicy: 'Bypass',
          noProfile: true
        });

        ps.addCommand('./selectfolder.ps1');
        ps.invoke()     
        .then(output => {
          //console.log(output);

          var shelloutput = output;
          console.log (shelloutput + '^^from external script');

          res.send(shelloutput);
        })
        .catch(err => {
          console.log('please select a directory path')
          //console.log('err');
        });
});
};

Есть ли способ заставить это работать локально? Есть ли триггер, о котором я не знаю, чтобы получить доступ к такого рода диалогу из браузера? Я знаю, что я не единственный человек с этой проблемой, но мне еще предстоит найти реальное решение.

1 Ответ

0 голосов
/ 28 мая 2019

Короткий ответ: Нет.

Более длинный ответ лучше всего проиллюстрировать, перефразировав ваш вопрос с другим именем сценария:

Можно ли с помощью моего браузера перейти по ссылке напосетите веб-сайт и запустите на нем случайный сценарий PowerShell с именем Delete_All_Files.ps1?

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

Если вы хотите запустить PowerShellсценариев на удаленных машинах, тогда вы должны изучить PSRemoting и Enter-PSSession .

@ kuzimoto верно.Если вы просто хотите отобразить диалоговое окно папки, есть более простые способы сделать это, а Fine Uploader - более простой способ.

Ответ на ваш комментарий: ЕслиВы хотите указать имя каталога, причина, по которой вы не можете сделать это, потому что вы по сути спрашиваете:

Используя мой браузер, могу ли я щелкнуть ссылку для посещения веб-сайта и получить егозапустите скрипт, который будет перечислять все файлы и папки в моем C: \, чтобы он мог выбрать папку C: \ users \ Justin Miller \ Desktop \ SECRET FILES \?

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

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