AlexeyMakarov
27-12-2017, 10:47
Добрый день. коллеги, написал маленькие функции на 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")
}
Не работает, не понимаю как решить. Есть предложения или примеры решения аналогичных проблем?
По факту получаеться, что у меня есть функция:
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")
}
Не работает, не понимаю как решить. Есть предложения или примеры решения аналогичных проблем?