Решил вопрос следующим образом:
В листинге 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 По аналогии можно заменить её на что угодно.