Powershell输入和输出的探索与应用
这里的输入和输出是指控制台可显示的输入输出。适用于人机交互,没有人看的输入输出也就没有意义了。
我们打开的Powershell.exe和PowerShell ISE以及其他非微软的应用程序,其使用PowerShell时会调用PowerShell的引擎。应用程序也称为宿主应用程序,和我们进行交互的即是那些程序。与我们交互的方式和行为方式都是由宿主应用程序决定的。
输入命令:Read-Host
1.提示信息后面自动加了个冒号;
2.用户键入任何信息都被作为该命令的返回结果;
3.可以把键入的信息传递给一个变量,例如:
4.如何实现图形化输入框:
可以调用.Net Framework中的Microsoft.VisualBasic组件,该组件包含了图形化输入框:
第一条命令是载入组件,可载入一次,多次使用其中的输入框(第二条命令);其中第二条命令中InputBox()方法中的三个参数,
第一个是提示框中的文本信息;
第二个参数是提示对话框的标题;
第三个可以空白或填写想要显示的输入框默认值。
输出命令:Write-Host/Output等等
当需要展示一个特定信息,比如使用其他颜色来吸引人们的注意力的时候,可使用Write-Host命令;
Write-Host和其他Cmdlets一样使用管道,但是它不放置任何数据道管道中。反而会直接写到宿主应用程序的界面。正如此,可以使用命令行中的-ForegroundColor和-BackgroundColor参数将前景和背景设置为其他颜色:
注:不是每个使用PowerShell的应用程序都支持其他颜色,也并不是每个应用程序都支持所有颜色。
该输出方法不适用于常规的输出结果,因为-Host命令输出到屏幕的任何东西都无法被捕捉。若执行远程命令或无人值守命令,-Host可能不会按照你的预期工作。正如开始所说,-Host命令仅仅用于与人进行直接交互。
针对手动格式化一个表格,可以使用更好的方法来产生输出结果,具体可参考 Learn PowerShell Toolmaking in A Month of Lunches(Manning 2012);
针对产生错误信息,警告信息,调试信息等,有更合适的方法实现;
所以,如果妮恰当的使用PowerShell,可能不会多次用到Write-Host命令。
Write-Output命令会将对象发送给管道。因为它不会直接发送到显示界面,所以不允许你指定其他任何的颜色。
它是PowerShell默认使用的一个Cmdlets,默认输出方式即使用该命令,即使你没有指定,PowerShell会在底层将信息传递给Write-Output命令。
基本过程为:
1.Write-Output命令将String类型的对象Hello World!放入管道中;
2.管道中只有这个String对象,其会直接到达管道的末端,也就是Out-Default命令;
3.Out-Default命令将对象传递给Out-Host命令;
4.Out-Host命令要求PowerShell的格式化系统格式化该对象。
5.Out-Host将格式化的结果集放在显示界面上。
下面示例中,会在第2步,进行判断对象长度是否大于10,进行过滤再传递给Out-Default:
而使用Write-Host,会直接显示在界面上,不会经过管道,直达显示界面:
其他的输出方式:
Write-Warning/Verbose/Debug/Error
Powershell针对每种输出方法都有对应的内置配置变量。如果变量设置为“Continue”,则可显示输出结果,若设置为“SilentlyContinue”,那么就不会产生任何输出信息。
其中Write-Warning/Error,默认配置变量值为“Continue”,可直接使用:
其中Write-Verbose/Debug,默认配置变量值为“SilentlyContinue”,可设置后使用,否则无信息显示:
注意:PowerShell还有两个输出命令,Write-Progress/Information,Progress是用来展示进度条的,实现原理和上述命令完全不同,可参阅其帮助文档;Write-Information Cmdlets是PowerShell V5引入的一个新命令,其将信息写入一个在Shell中唯一、结构化的流中,使得V5版本既可以写入结构化数据也可以写入信息消息。Write-Host底层使用的是Write-Information命令,可参阅Https://teachnet.microsoft.com/en-us/library/dn998020.aspx
----End---