Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск самописной программы .exe с параметрами

Ответить
Настройки темы
PowerShell - [решено] запуск самописной программы .exe с параметрами

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. коллеги, написал маленькие функции на powershell, через SAPIEN нарисовал форму и скомпилировал из своего кода программу: USERLIST.exe Суть проблемы в том, что я хочу например положить эту програмку в каталог: C:\Windows\System32 и юзать через cmd с параметрами, аналогично программам gpupdate, ipconfig (можно взять любую прграмму)
По факту получаеться, что у меня есть функция:
function GPReport
{
$UserName = $env:USERNAME
$Computername = $env:COMPUTERNAME
$reportlist = "c:\temp\USERLIST\GPReport$Computername$UserName.html"

#Блок кода, отвечающий за формирование отчета
if (Test-Path $reportlist)
{
#Удалаяем старую версию выгрузки отчета GPReport
Remove-Item -Path $reportlist
}

#Запустили формирование отчета GPReport в каталоге USERLIST, этот элемент из-за такой конструции воспринимаеться как строка: -ArgumentList "/H c:\temp\USERLIST\GPReport$Computername$UserName.html"
start-process -FilePath 'C:\Windows\System32\gpresult.exe' -ArgumentList "/H c:\temp\USERLIST\GPReport$Computername$UserName.html" -WindowStyle Hidden

#Если путь найден, то выходим из цикла $reportlist
while ($true)
{
if (Test-Path $reportlist) { break }
}
#Задержка
Start-Sleep 30
}

работу этой функции в стандартных условиях я передаю на выполнение в кнопку: $buttonGPReport_Click = { GPReport }

Но теперь я хочу, чтобы можно было выполнить её черерз cmd, как обычную виндовую программку с параметром, например так: USERLIST /GPReport
причем я не могу понять сам принцип работы. В первых 14 строках кода я написал так, но не могу понять что не так:

param (
[Parameter(Mandatory = $true)][string[]] $Command # это сравниваем, если равна ** тогда делаем **
#[Parameter(Mandatory = $false)][string[]] $copymail #второй адресат, не обязательный
)

if ($Command -eq "")
{
#[void][reflection.assembly]::Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
[void][System.Windows.Forms.MessageBox]::Show("пусто", "Caption")
}
else
{
[void][System.Windows.Forms.MessageBox]::Show("$buttonGPReport_Click", "Caption")
}


Не работает, не понимаю как решить. Есть предложения или примеры решения аналогичных проблем?

Отправлено: 10:47, 27-12-2017

 

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar USERLIST2.rar
(125.8 Kb, 1 просмотров)

Решил вопрос следующим образом:
В листинге MainForm.psf оставил только ссылки на функции:
Скрытый текст

$OnLoadFormEvent={
}

$button1_Click={
GPReport
}

$button2_Click={
Zamexe
}


В листинге Globals.ps1 оставил всё как было сгенерировано оболочкой:

Скрытый текст

function Get-ScriptDirectory
{
<#
.SYNOPSIS
Get-ScriptDirectory returns the proper location of the script.
.OUTPUTS
System.String
.NOTES
Returns the correct path within a packaged executable.
#>
[OutputType([string])]
param ()
if ($hostinvocation -ne $null)
{
Split-Path $hostinvocation.MyCommand.path
}
else
{
Split-Path $script:MyInvocation.MyCommand.Path
}
}
[string]$ScriptDirectory = Get-ScriptDirectory


По факту изменениями занимался в листинге: Startup.pss

Для примера оставил только 1 функцию для кнопки:GPReport:

Скрытый текст

function GPReport
{
$UserName = $env:USERNAME
$Computername = $env:COMPUTERNAME
$reportlist0 = Get-Date -Format "yyMMddhhmm"
$reportlist = "c:\temp\USERLIST\GPReport_$($reportlist0)_$($Computername)_$($UserName).html"

if (Test-Path $reportlist)
{
Remove-Item -Path $reportlist
}
start-process -FilePath 'C:\Windows\System32\gpresult.exe' -ArgumentList "/H $($reportlist)" -WindowStyle Hidden

while ($true)
{
if (Test-Path $reportlist) { Start-Sleep 5; break }
Start-Sleep 1 #Задержка
}
}


И уже функцию GPReport вызвал черерз системную функцию Main, данная функция была создана автоматически при создании проекта, она и отвечает за вызов (запуск) формы проекта, в этой функции добавил всего 1 строку: if ($Commandline.Trim('"') -eq "/GPreport") { GPreport } конечный вид функции такой:

Скрытый текст

function Main {

Param ([String]$Commandline)
$fpath = "C:\TEMP\USERLIST"

$isfile = Test-Path $fpath
if ($isfile -eq "True") { }
else
{
New-Item -Path 'C:\TEMP' -Name 'USERLIST' -ItemType "directory"
}

#Проверка на наличие директории $fpath
if (!(Test-Path $fpath))
{
Write-Host "Не найдена директория $fpath"

[System.Windows.Forms.MessageBox]::Show("НЕ НАЙДЕНА ДИРЕКТОРИЯ $($fpath)",
"ОШИБКА", [System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Warning) | Out-Null
exit
}
# Строка 105 являеться парметром для приложения USERLIST2.exe /GPreport, т.е. Если из каталога запустить ПО USERLIST2
# и задать ключ, команда отработает, если просто задать USERLIST2, запустится визуальная форма
if ($Commandline.Trim('"') -eq "/GPreport") { GPreport }

else
{
if ((Call-MainForm_psf) -eq "OK")
{

}
}
$global:ExitCode = 0 #Set the exit code for the Packager
}


Таким образом получил возможность вызывать черерз cmd программу userlist.exe и вызывать из userlist нужные мне функции. Кому интересно, прикладываю рабочий пример, только в примере я второй кнопкой вызываю программу: zam.exe По аналогии можно заменить её на что угодно.

Отправлено: 07:30, 29-12-2017 | #2



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

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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск самописной программы .exe с параметрами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] запуск программы с параметрами mcintosh55 Скриптовые языки администрирования Windows 4 06-12-2015 16:26
CMD/BAT - Запуск программы с параметрами Yo Den Скриптовые языки администрирования Windows 8 15-06-2014 06:50
Запуск программы с параметрами Rulezzz2 AutoIt 8 31-03-2013 05:16
CMD/BAT - [решено] Запуск программы с параметрами art.andr Скриптовые языки администрирования Windows 5 27-07-2012 16:18
[решено] Запуск EXE c параметрами ( test.exe -123 -abc ) FlatX007 AutoIt 2 22-06-2009 16:47




 
Переход