第19章 输入和输出
19.1 提示并显示信息
PowerShell如何展示信息和进行对应的提示依赖于PowerShell运行的方式。你可以看到,PowerShell作为一种底层的引擎被创建。
与你进行交互的对象称为宿主应用程序。当运行PowerShell.exe时,你看到的命令行控制台称为控制台主机。图形化的PowerShell ISE通常被称为ISE主机或者图形化主机。其他非微软的应用程序也可以调用PowerShell引擎。你与宿主应用程序进行交互,之后宿主应用程序将执行的命令传递给该引擎。宿主应用程序会展现引擎产生的结果集。
19.2 Read-Host命令
PowerShell的Read-Host Cmdlet的功能是展示一个文本提示框,然后收集来自用户输入的信息。
PS C:\>Read-Host "Enter a computer name"
Enter a computer name: SERVER-R2
SERVER2
该示例突出Cmdlet的两个重要的事实。
- 提示信息的最后添加了一个冒号。
- 用户键入的任何信息都会作为该Cmdlet的返回结果(严格来说,键入的信息被放进了管道)。
你经常会将该输入信息传递给一个变量,类似下面这样。
PS C:\>$computerName = Read-Host "Enter a computer name"
Enter a computer name: SERVER-R2
很多管理员会给用户部署一些PowerShell脚本,但是又不希望用户在命令行界面输入信息(毕竟,这并不是很“Windows 风格”)。我们想说的是可以实现,但是稍微复杂。
为了创建一个图形界面的输入框,你必须借助于.Net Framework本身。使用下面的命令。
PS C:\>[void][system.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
你只需要在某个PowerShell会话中执行一次即可。该命令会载入.Net Framework中的一个组件Microsoft.VisualBasic,实际上PowerShell并不会自动载入该组件。该Framework组件包含了大量的VisualBasic核心的框架元素,其中就包括图形化输入框。
如果你觉得很难理解,也没关系,你可以照搬该命令,不需要理解它们的原理。一旦该Framework组件被云载入,你可以通过下面的命令来使用它。
PS C:\>$ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a
computer name','Computer Name','localhost')
这里你可以修改的地方是InputBox()方法的3个参数。
- 第一个参数是提示框中的文本信息。
- 第二个参数是提示对话框的标题。
- 第三个参数——可以是空白或完全省略,是你想显示在输入框中的默认值。
19.3 Write-Host命令
Write-Host会和其他Cmdlet一样使用管道,但是它并不会放置任何数据到管道中。相反,它会直接写到宿主应用程序的界面。
19.4 Write-Output命令
与Write-Host命令不同,Write-Output命令可以将对象发送给管道。因为它不会直接写到显示界面,所以不允许你指定其他任何的颜色。
19.5 其他输出方式
PowerShell也存在其他方法产生输出结果。这些方法不会像Write-Host那样向管道写入某些信息,它们看起来像是Write-Host命令。但是它们可以通过可以被截断的方式产生结果。
PowerShell针对每种输出方法都有对应的内置配置变量。如果配置变量设置为“Continue”,那么我们即将展示给你的命令就会真正产生输出结果。如果配置变量被设置为“SilentlyContinue”,那么关联的输出命令就不会产生任何信息。表19.1包含了这些Cmdlet的列表。
表19.1 可选的输出Cmdlet
Cmdlet | 作用 | 配置变量 |
---|---|---|
Write-Warning | 显示警告信息,默认会以黄色字体显示 | 默认Continue |
Write-Verbose | 显示详细信息,默认黄色字体 | 默认SilentlyContinue |
Write-Debug | 显示调试信息 | 默认SilentContinue |
Wirte-Error | 产生一个错误信息 | 默认为Continue |