Выполнение .vbs из сценария PowerShell не работает, но запуск .vbs из командной строки PowerShell не работает

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

Доступ к сетевому коммутатору можно получить через интерфейс локального порта Telnet.

Моя реализация сценария PowerShell выглядит следующим образом:

test.ps1:

Start-Process -FilePath "C:\Windows\System32\cscript.exe" -ArgumentList "C:\<path_to_file>\off.vbs";

Start-Sleep -s 10; # wait 10 seconds so that hardware powers down completely
Start-Process -FilePath "C:\Windows\System32\cscript.exe" -ArgumentList "C:\<path_to_file>\on.vbs";

off.vbs:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /C"
WScript.Sleep 1000
WshShell.SendKeys ("telnet 172.28.104.32{Enter}")
WshShell.SendKeys ("pset 4 0{Enter}")
WshShell.SendKeys ("logout{Enter}")
WScript.Sleep 1000
WScript.Quit

on.vbs:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /C"
WScript.Sleep 1000
WshShell.SendKeys ("telnet 172.28.104.32{Enter}")
WshShell.SendKeys ("pset 4 1{Enter}")
WshShell.SendKeys ("logout{Enter}")
WScript.Sleep 1000
WScript.Quit

Если я запустил это в консоли PowerShell, операция будет работать:

Выполнение .vbs из сценария PowerShell не работает, но запуск .vbs из командной строки PowerShell не работает

Однако, если я запускаю сценарий PowerShell, я не вижу никаких операций.

Обновлено: управляющая машина на этом ПК представляет собой ванильную коробку с Windows 10, и новое программное обеспечение не может использоваться, например, putty или plink, существует ограничение на использование встроенного исполняемого файла Windows + некоторые сценарии (причины безопасности)

Изменение cscript.exe на wscript.exe, по-видимому, работает. но не уверен, почему, поскольку оба почти идентичны.

Dexobox 26.10.2018 22:54
cmd /c создает оболочку, которая мгновенно завершает работу, ничего не делая; вам нужен cmd /k, чтобы он оставался открытым. Как правило, отправка ключей и использование фиксированных интервалов сна ненадежны. cscript запускает сценарий синхронно как консольное приложение, тогда как wscript запускает сценарий асинхронно как приложение с графическим интерфейсом.
mklement0 27.10.2018 04:24

Не используйте SendKeys() для автоматизации Telnet.

Ansgar Wiechers 27.10.2018 13:25

Уберите VBScript с картинки и просто запустите telnet прямо в PowerShell

Nick.McDermaid 27.10.2018 15:15

у нас есть выбранное количество программного обеспечения на этой управляющей машине, и мы не можем добавить к нему шпатлевку / ссылку для реализации по соображениям безопасности (что вроде несправедливо) @AnsgarWiechers, связанное решение здесь не применяется

Dexobox 29.10.2018 20:04

добавление cmd / k работает правильно. У меня нет опыта работы в среде Windows, но это объяснение было полезно :). Это было бы официальным решением этой проблемы с минимальными изменениями. Я действительно пробовал это с помощью только «cmd» и никаких вариантов, которые, похоже, тоже работали. Я согласен с @ mklement0, что этот вид сценариев нестабилен для выполнения с гарантированным результатом, но это быстрое исправление, пока я не найду способ переделать дизайн.

Dexobox 29.10.2018 21:17

Я не хочу обидеться, но «мы используем telnet» и «мы не можем использовать стороннее программное обеспечение из-за требований безопасности» - это противоречие. Получить менее безопасный сложнее, чем telnet. Если это ваши требования, ваш процесс управления проектами нарушен.

Bacon Bits 30.10.2018 18:41

Я не думаю, что его безопасность утверждает, что это ИТ-команда, которая управляет развертыванием этих машин с контроллерами, и потому, что они не хотят добавлять дополнительную строку к развертыванию своих контроллеров Windows 10, потому что им придется запускать регресс безопасности для любого нового представленного программного обеспечения на этой коробке. Поскольку оба устройства telnet находятся в защищенной локальной сети, я не понимаю, почему мне следует запретить использование plink, но я отвлекаюсь от @BaconBits

Dexobox 30.10.2018 21:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
344
0

Другие вопросы по теме