我偶然发现了将xaml,powershell和cscript文件集成到“在Windows上有能力执行任何操作”类型程序的可爱概念。即使15年前我在大学里做了一点.net,也从未真正接触过c#。
我最近的发现使我想了解更多有关它的信息,但是,当我开始使用与过去用于编码HTML表的方法相同的方法来设计一些GUI时,最终使用(几乎是相同的想法)...我不禁怀疑是否有一种方法可以更快速,更有效地做到这一点。
当我学习如何集成PS / XAML时,我很好奇甚至需要Xaml文件的可能性。就像,如果我可以列出包含通过应答文件或模板调用的嵌套变量的变量列表,而根本不需要调用Xaml文件怎么办?
也许这是没有意义的,也许在每种情况下都需要xaml,这很好...但是我可以使用ps脚本定义的变量来编码xml吗?要完成所有这些操作,甚至还需要一个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文件的情况下完成它,那将会很麻烦。
答案 0 :(得分:0)
您可以使用Windows窗体或WPF创建PowerShell GUI。您发布的是一个批处理文件。如果您要这样做,您仍然可以使用PowerShell创建控制台GUI。
示例控制台应用程序: Friday Fun – A PowerShell Console Menu 作者的例子:
#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)
此处是另一个控制台示例:
否则,在整个网络上还有很多WinForms和WPF GUI开发的示例,
示例: PowerShell and WPF: Introduction and Building Your First Window
如果您是视觉学习者,那么可以观看YouTube视频:
针对问题的OP更新
了解。 至于...
“基本上,我想在Xaml中创建变量,这样我就可以知道 powershell .... $ gridrow = 3 ...“,
因此,您所追求的更多细节/示例至关重要。但是,您可以在XAML中定义变量,该变量已记录在MS文档和Q&A帖子中。
How can I define a variable in XAML?
Can I declare variable in the XAML code?
每篇文章
# 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();
}
}