Графический интерфейс Powershell / Xaml - переменные, элементы управления, динамические сценарии и т. Д. - PullRequest
0 голосов
/ 07 января 2019

Я наткнулся на прекрасную концепцию интеграции файлов xaml, powershell и cscript в программу типа «довольно способная делать что-либо на окнах». Я никогда не увлекался c #, хотя 15 лет назад я учился в колледже .net ...

Мое недавнее открытие заставило меня захотеть узнать больше об этом, и все же, когда я начал разрабатывать некоторые графические интерфейсы с использованием тех же методов, которые я использовал в прошлом для кодирования таблиц HTML, и в конечном итоге CSS Flex / Grid с ( почти та же идея) ... я не мог не задаться вопросом, есть ли способ сделать это намного быстрее и эффективнее.

Когда я изучал, как интегрировать PS / XAML, мне было любопытно, что для начала понадобится даже файл Xaml. Например, что если бы я мог составить список переменных с вложенными переменными, которые вызываются через файл ответов или шаблон, без необходимости вообще вызывать файл Xaml?

Возможно, это бессмысленно, возможно, xaml необходим в каждом сценарии, что хорошо ... но могу ли я кодировать xml с переменными, которые определяет скрипт ps? И нужен ли файл cscript для всего этого?

Код PS / XAML не прилагается. Просто гипотетический на данный момент ... но я приведу пример идеи пакетного файла, который у меня был, который иллюстрирует точку, которую я хочу достичь здесь ...

Я не совсем уверен, что это сработает? Но кажется, что это крутая идея - сократить количество времени, необходимого для «работы»

set "a1=GOOD"
set "h1=ECHO # _______________________________________________________ #"
set "h2=ECHO #                                                         #"
set "h3=ECHO # **********                                   ********** #"
set "h4=ECHO # ******************************************************* #"
set "h5=ECHO #                        %a1%                             #"
set a0="%h4%^%h4%^%h3%^%h3%^%h2%^%h5%^%h2%^%h3%^%h3%^%h4%^%h4%"
set a1=GOOD
%a0%
set a1=BEANS
%a0%

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

По сути, я хочу сделать переменные в Xaml, чтобы я мог сказать powershell ....

$gridrow = 3
$gridcol = 4
$currentgrid = $gridrow (3) * $gridcol (4) = (12)
$cg1 = horizontalignment="center", etc content="section 1"
$cg2 = etc etc so forth

тогда у него был бы целый файл Xaml, который я мог бы гораздо проще копировать и редактировать ...

очевидно, что это можно сделать с помощью других методов, но если это можно сделать без фактического сохранения в файл xaml, тогда это будет плохо.

1 Ответ

0 голосов
/ 08 января 2019

Вы создаете PowerShell GUI, используя Windows Forms или WPF. То, что вы разместили, является командным файлом. Вы по-прежнему можете создавать консольный графический интерфейс с помощью PowerShell, если это то, что вам нужно.

Пример консольного приложения: Friday Fun - Консольное меню PowerShell Пример автора:

#Requires -version 2.0

<#
 -----------------------------------------------------------------------------
 Script: Demo-ConsoleMenu.ps1
 Version: 1.0
 Author: Jeffery Hicks
    http://jdhitsolutions.com/blog
    http://twitter.com/JeffHicks
    http://www.ScriptingGeek.com
 Date: 12/30/2011
 Keywords: Read-Host, Menu, Switch
 Comments:
 The best way to create a menu is to use a here string

 Use -ClearScreen if you want to run CLS before displaying the menu

 "Those who forget to script are doomed to repeat their work."

  ****************************************************************
  * DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED *
  * THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK.  IF   *
  * YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, *
  * DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING.             *
  ****************************************************************
 -----------------------------------------------------------------------------
 #>

Function Show-Menu {

Param(
[Parameter(Position=0,Mandatory=$True,HelpMessage="Enter your menu text")]
[ValidateNotNullOrEmpty()]
[string]$Menu,
[Parameter(Position=1)]
[ValidateNotNullOrEmpty()]
[string]$Title="Menu",
[switch]$ClearScreen
)

if ($ClearScreen) {Clear-Host}

#build the menu prompt
$menuPrompt=$title
#add a return
$menuprompt+="`n"
#add an underline
$menuprompt+="-"*$title.Length
$menuprompt+="`n"
#add the menu
$menuPrompt+=$menu

Read-Host -Prompt $menuprompt

} #end function

#define a menu here string
$menu=@"
1 Show info about a computer
2 Show info about someones mailbox
3 Restarts the print spooler
Q Quit

Select a task by number or Q to quit
"@

#Keep looping and running the menu until the user selects Q (or q).
Do {
    #use a Switch construct to take action depending on what menu choice
    #is selected.
    Switch (Show-Menu $menu "My Help Desk Tasks" -clear) {
     "1" {Write-Host "run get info code" -ForegroundColor Yellow
         sleep -seconds 2
         } 
     "2" {Write-Host "run show mailbox code" -ForegroundColor Green
          sleep -seconds 5
          }
     "3" {Write-Host "restart spooler" -ForegroundColor Magenta
         sleep -seconds 2
         }
     "Q" {Write-Host "Goodbye" -ForegroundColor Cyan
         Return
         }
     Default {Write-Warning "Invalid Choice. Try again."
              sleep -milliseconds 750}
    } #switch
} While ($True)

Другой пример консоли здесь:

Создание меню в Powershell

В противном случае в Интернете есть множество примеров разработки WinForms и WPF GUI, а также

Пример: PowerShell и WPF: введение и создание первого окна

YouTube видео, если вы более опытный визуал:

PowerShell WPF GUI

Обновление для ОП по вопросу

Понял. Что касается ...

"По сути, я хочу сделать переменные в Xaml, чтобы я мог сказать powershell .... $ gridrow = 3 ... ",

Итак, больше деталей / примеров того, что вы ищете, имеет первостепенное значение. Тем не менее, вы можете определить переменную в XAML, и это задокументировано в документах MS и постах вопросов и ответов.

Как определить переменную в XAML?

Могу ли я объявить переменную в коде XAML?

за статью

# After definitition:

<Window x:Class="WpfApplication1_delete_test.Window1"  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:System="clr-namespace:System;assembly=mscorlib"  
    Title="Window1">   
    <Window.Resources>  
        <System:String x:Key="myStr">init</System:String>  
    </Window.Resources>  
    <TextBlock Name="txtBlock" Text="{Binding Source={StaticResource myStr}}"/>   
</Window>  

# you can use from code like that:

public partial class Window1 : Window   
    {   
        public Window1()   
        {   
            InitializeComponent();   

            Resources["myStr"] = "string";   

            txtBlock.Text = FindResource("myStr").ToString();   
        }   
    }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...