powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
10 сообщений из 10, страница 1 из 1
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102578
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

в функции есть длинная строка с текстом скрипта для PowerShell.
Можно как то выполнить этот текст скрипта через ShellApi напрямую из программы или передать в ShellExecute минуя сохранение текста скрипта в промежуточный файл?

Спасибо
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102592
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

Непонятно только, при чём тут Dlephi?..

powershell.exe -?-Command
Выполняет указанные команды (и любые параметры) как введенные
в командной строке Windows PowerShell, а затем завершает работу,
если не задан параметр NoExit. Значением параметра Command
может быть "-", строка или блок сценария.

Если Command имеет значение "-", текст команды считывается из стандартного
ввода.

Если значением Command является блок сценария, он должен быть заключен
в фигурные скобки ({}). Вы можете указать блок сценария только при
использовании PowerShell.exe в Windows PowerShell. Результаты блока сценария возвращаются родительской оболочке как
десериализованные объекты XML, а не как активные объекты.

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

При написании строки команды Windows PowerShell используйте следующий формат:
"& {<команда>}", где
кавычки отделяют строку, а оператор вызова (&)
запускает выполнение команды.

ПРИМЕРЫ:
PowerShell -Command {Get-EventLog -LogName security}
PowerShell -Command "& {Get-EventLog -LogName security}"
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102617
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp
hlopotun,
Непонятно только, при чём тут Delphi?..

ключ -command я видел, вся проблема в том что скрипт многострочный и имеет входящие параметры.
Если из файла то запуск выглядит так:
powershell.exe -executionpolicy bypass -File c:\Temp\ScriptFileName.ps1 -computername "PCName" -username "PCName\UserNAME"
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, что можно написать на PowerShell, можно написать и непосредственно на
Дельфи. Тебе надо разгребать старую проктостоматологию, а не накручивать слои новой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102648
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Всё, что можно написать на PowerShell, можно написать и непосредственно на
Дельфи. Тебе надо разгребать старую проктостоматологию, а не накручивать слои новой.

я не против переписать этот скрипт на Delphi:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<#
.Synopsis
  Grant logon as a service right to the defined user.
.Parameter computerName
  Defines the name of the computer where the user right should be granted.
  Default is the local computer on which the script is run.
.Parameter username
  Defines the username under which the service should run.
  Use the form: domain\username.
  Default is the user under which the script is run.
.Example
  Usage:
  .\GrantSeServiceLogonRight.ps1 -computerName hostname.domain.com -username "domain\username"
#>
param(
  [string] $computerName = ("{0}.{1}" -f $env:COMPUTERNAME.ToLower(), $env:USERDNSDOMAIN.ToLower()),
  [string] $username = ("{0}\{1}" -f $env:USERDOMAIN, $env:USERNAME)
)
Invoke-Command -ComputerName $computerName -Script {
  param([string] $username)
  $tempPath = [System.IO.Path]::GetTempPath()
  $import = Join-Path -Path $tempPath -ChildPath "import.inf"
  if(Test-Path $import) { Remove-Item -Path $import -Force }
  $export = Join-Path -Path $tempPath -ChildPath "export.inf"
  if(Test-Path $export) { Remove-Item -Path $export -Force }
  $secedt = Join-Path -Path $tempPath -ChildPath "secedt.sdb"
  if(Test-Path $secedt) { Remove-Item -Path $secedt -Force }
  try {
    Write-Host ("Granting SeServiceLogonRight to user account: {0} on host: {1}." -f $username, $computerName)
    $sid = ((New-Object System.Security.Principal.NTAccount($username)).Translate([System.Security.Principal.SecurityIdentifier])).Value
    secedit /export /cfg $export
    $sids = (Select-String $export -Pattern "SeServiceLogonRight").Line
    foreach ($line in @("[Unicode]", "Unicode=yes", "[System Access]", "[Event Audit]", "[Registry Values]", "[Version]", "signature=`"`$CHICAGO$`"", "Revision=1", "[Profile Description]", "Description=GrantLogOnAsAService security template", "[Privilege Rights]", "$sids,*$sid")){
      Add-Content $import $line
    }
    secedit /import /db $secedt /cfg $import
    secedit /configure /db $secedt
    gpupdate /force
    Remove-Item -Path $import -Force
    Remove-Item -Path $export -Force
    Remove-Item -Path $secedt -Force
  } catch {
    Write-Host ("Failed to grant SeServiceLogonRight to user account: {0} on host: {1}." -f $username, $computerName)
    $error[0]
  }
} -ArgumentList $username


но боюсь займёт это столько время сколько просто нет. И тот кто задания раздаёт ждать не станет. Я не архитектор и решения по разгребанию не принимаю.
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102651
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunИ тот кто задания раздаёт ждать не станет. Я не архитектор и решения по
разгребанию не принимаю.
Тогда не выпендривайся и говнокодь сохранение этого скрипта в файл.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102682
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

чем объясняется желание отказаться от промежуточного файла со скриптом?
Его же можно было бы удалять после отработки интерпретатором PowerShell'а


так же порекомендую этот топик , думаю пригодится на следующем шаге
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102685
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнЕго же можно было бы удалять после отработки интерпретатором PowerShell'а

Или даже использовать FILE_FLAG_DELETE_ON_CLOSE, но это же аффтар...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102701
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun

я не против переписать этот скрипт на Delphi:

Что там сложного?..

Параметры выкидываешь, заменяешь их прямыми подстановками, т.е. тупо в начале сценария пишешь:
Код: powershell
1.
2.
  $computerName = ...
  $username = ...

Ведь ты сам вызываешь сценарий и знаешь их значения заранее.

А сам скрипт пишешь в одну строку, разделяя команды символом ';' и, при необходимости, экранируя служебные символы.
Весь вопрос в его размере, я не помню есть там ограничения на размер командной строки или нет.

И второй вариант, более сложный:

Вызываешь скрипт с параметром '-command -' и стримишь ему сценарий на StdIn.

Да, потрахаться придётся с отладкой, но ты же сам не ищешь лёгких путей 😃
...
Рейтинг: 0 / 0
Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
    #40102722
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У него скрипт в Temp складывает три файла. В чем проблема положить туда еще и четвертый - сам скрипт?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Выполнить текст скрипта в PowerShell минуя промежуточный файл скрипта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]