Используйте powershell для запуска файла конфигурации cygwin


0

Я использую Windows Server 2012 R2. У меня есть файл cygwin_config, который я запускаю внутри cygwin с помощью команды excpect cygwin_config . Файл настраивает мои ssh_config и sshd_config. Есть ли способ запустить этот скрипт из моего PowerShell, чтобы мне не нужно было заходить в Cygwin для его запуска? Я пробовал несколько вещей, но безуспешно, таких как:

$file= Get-ChildItem  C:\Cygwin\home\Administrator\cygwin_config | Select-Object 
$cmd=Start-Process C:\Cygwin\bin\mintty.exe $file

Он попытался открыть mintty.exe, но он немедленно закрыл mintty.exe. Если ничто иное не поможет, я думаю, мне нужно будет создать пользователей, которые нужны ssh-host-config с помощью powershell.

Я также создал файл с ожидаемым / path / to / cygwin_config и сохранил его как файл .exe. После двойного щелчка по нему появляется всплывающее сообщение об ошибке: «Windows не может получить доступ к указанному устройству, пути или файлу. Возможно, у вас нет соответствующих разрешений для доступа к ним». Я пытался запустить вещи от имени администратора и изменил разрешения в каталоге, но ничего не работает для этого.

Мой cygwin_config:

#!/bin/expect -f

spawn ssh-host-config

set timeout 20

expect {
     "Should StrictModes be used? (yes/no)" { send "no\r" }
}

set timeout 5

expect {
     "new local account 'sshd'? (yes/no)" { send "yes\r" }
}

expect {
     "Do you want to install sshd as a service?"  {send 
     "yes\r";exp_continue }
     "Enter the value of CYGWIN for the daemon:" { send " \r"; }
}

set timeout 5

expect {
     "Do you want to use a different name? (yes/no)" { send "no\r";
      exp_continue }
     "Create new privileged user account" { send "yes\r";
      exp_continue }
     "Please enter the password" { send "pwd\r";
      exp_continue }
     "Reenter:" {send "pwd\r";
      exp_continue }
}

[РЕДАКТИРОВАТЬ] Получил из-за ошибки всплывающих окон, изменив разрешения для файла из свойств (дал полные права администратору). Но это все равно не будет работать, потому что приложение не может работать на моем компьютере: «Это приложение не может работать на вашем компьютере», поэтому это решение отправляется в корзину.

Ответы:


1

Я не использую Powershell, вероятно, должна работать установка, аналогичная описанной здесь. В целом, может быть две проблемы с перечисленным выше подходом:

  1. Этот сценарий является ожидаемым, поэтому его следует запускать через C: \ Cygwin \ bin \ hope.exe, а не C: \ Cygwin \ bin \ mintty.exe
  2. Расположение скрипта интерпретируется как аргумент команды Cygwin, поэтому путь должен использовать нотацию, которую понимает Cygwin (которая отличается от нотации Windows, если она не заключена в кавычки).

Вы можете попробовать:

C:\Cygwin\bin\expect.exe 'C:\Cygwin\home\Administrator\cygwin_config'

Эти одинарные кавычки важны, поэтому Cygwin распознает путь в стиле Windows. Или вы можете сначала попытаться использовать нотацию Cygwin:

C:\Cygwin\bin\expect.exe /home/Administrator/cygwin_config'

Вот другой пример для игры. Создайте файл с именем run_myscript.bat с содержимым:

C:\Cygwin\bin\sh 'C:\Cygwin\home\Administrator\myscript.sh'

Создайте скрипт myscript.sh в указанном месте с содержимым:

date
sleep 10

Убедитесь, что ваш пакетный скрипт исполняемый (chmod 775 run_myscript.bat). Запустите этот пакетный скрипт.


Спасибо, мне удалось немного продвинуться в моих поисках. Теперь вместо этого, когда он пытается запустить его, он не будет успешным, потому что ssh-host-config не существует в соответствии с powershell. C:\Cygwin\bin\expect.exe : couldn't execute "ssh-host-config": no such file or directory At C:\Users\Administrator\Desktop\cygwin.ps1:1 char:1 + C:\Cygwin\bin\expect.exe '/home/Administrator/cygwin_config'´
Мира

Мира, это не PowerShell, который сообщает, что ssh-host-config не существует, это сообщение происходит от команды ожидаемого (и только передается PowerShell). Вы можете захотеть создать сценарий оболочки в Cygwin, который устанавливает необходимые переменные среды (в частности, PATH) и вызвать ssh-host-config из этого сценария оболочки, и, наконец, вызвать этот сценарий оболочки с помощью команды spawn из ожидаемого сценария.
Уве Майер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.