重定向:使用 Out-* Cmdlet 重定向数据来源: 发布时间:星期四, 2009年2月12日 浏览:117次 评论:0
Windows PowerShell 为您提供了多个用于直接控制数据输出 cmdlet这些 cmdlet 具有两个重要共同特征 第它们通常都将数据转换为某种文本形式这是它们要将数据输出到需要接受文本输入系统组件这意味着它们需要以文本形式表示对象因此文本格式将和 Windows PowerShell 控制台窗口中所显示格式相同 第 2这些 cmdlet 都使用 Windows PowerShell 动词 =>Out这是它们要将信息从 Windows PowerShell 中发送到其他位置=>Out-Host cmdlet 也不例外:主机窗口显示位于 Windows PowerShell 的外这特征十分重要从 Windows PowerShell 发出数据时实际上将删除该数据如果试图创建将数据分页发送到主机窗口管道然后尝试将其格式设置为列表则会看到此类情况如下所示: PS> Get-Process | Out-Host -Paging | Format-List \'\"> 您可能希望该命令以列表格式来显示进程信息页面实际上它将显示默认表格格式列表: Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 101 5 1076 3316 32 0.05 2888 alg ... 618 18 39348 51108 143 211.20 740 explorer 257 8 9752 16828 79 3.02 2560 explorer ... <SPACE> 下页;<CR> 下行;Q 退出\'\"> ... \'\"> =>Out-Host cmdlet 将数据直接发送到控制台因此 =>Format-List 命令将不会收到任何要进行格式设置输入项 若要构建此命令结构正确方式是将 =>Out-Host cmdlet 放在管道末尾如下所示这样将导致先在列表中设置进程数据格式然后再进行分页和显示 PS> Get-Process | Format-List | Out-Host -Paging Id : 2888 Handles : 101 CPU : 0.046875 Name :alg ... Id : 740 Handles : 612 CPU : 211.703125 Name :explorer \'\"> Id : 2560 Handles : 257 CPU : 3.015625 Name :explorer ... <SPACE> 下页;<CR> 下行;Q 退出\'\"> ... \'\"> 此方式适用于所有[Page] =>Out cmdlet=>Out cmdlet 应始终出现在管道末尾 所有 =>Out cmdlet 都以文本形式呈现输出并使用控制台窗口有效格式设置(包含行长度限制)进行显示\'\"> 对控制台输出进行分页 (Out-Host)\'\">
默认情况下Windows PowerShell 会将数据发送到主机窗口这和 Out-Host cmdlet 作用完全相同正如上文中所述Out-Host cmdlet 主要用途是将数据进行分页例如以下命令使用 Out-Host 对 Get-Command cmdlet 输出进行分页:PS> Get-Command | Out-Host -Paging \'\"> 也可以使用 =>more 来对数据进行分页在 Windows PowerShell 中=>more 是个称为 =>Out-Host -Paging 以下命令演示了如何使用 =>more 来对 Get-Command 输出进行分页: PS> Get-Command | more \'\"> 如果将个或多个文件名用作 more 参数则该将读取指定文件并将其内容分页发送到主机: PS> more c:\\boot.ini [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS [operating systems]\'\"> ... \'\"> 放弃输出 (Out-Null)\'\">
=>Out-Null cmdlet 是专为立即放弃其接收任何输入而设计如果希望放弃作为运行命令副产品而获得不需要数据则此命令十分有用键入以下命令后将不会返回任何输出:PS> Get-Command | Out-Null \'\"> =>Out-Null cmdlet 不会放弃输出例如如果输入以下命令将显示条消息通知您 Windows PowerShell 无法识别“Is-NotACommand”: PS> Get-Command Is-NotACommand | Out-Null Get-Command :无法将“Is-NotACommand”识别为 cmdlet、、可运行\'\"> 或脚本文件\'\"> 所在行:1 :12 \'\"> + Get-Command <<<< Is-NotACommand | Out-Null\'\"> \'\"> 打印数据 (Out-Prer)\'\">
可以使用 =>Out-Prer cmdlet 来打印数据如果未提供打印机名称则 =>Out-Prer cmdlet 将使用默认打印机通过指定打印机显示名称您可以使用任何基于 Windows 打印机无需指定任何种类打印机端口映射甚至无需指定真实物理打印机例如如果安装了 Microsoft Office 文档图像工具可以通过键入以下命令将数据发送到图像文件:PS> Get-Command Get-Command | Out-Prer -Name \"Microsoft Office Document Image Writer\" \'\"> 保存数据 (Out-File)\'\">
通过使用 =>Out-File cmdlet可以将输出发送到文件而不是控制台窗口以下命令行将个进程列表发送到文件 =>C:\\temp\\processlist.txt:PS> Get-Process | Out-File -FilePath C:\\temp\\processlist.txt \'\"> 如果习惯于传统输出重定向则使用 =>Out-File cmdlet 结果可能和您预期结果区别若要了解此命令行为您必须了解运行 =>Out-File cmdlet 上下文 默认情况下=>Out-File cmdlet 将创建 Unicode 文件从长远角度来看这是最佳默认值但这意味着预期使用 ASCII 文件工具将无法正确处理该默认输出格式可以使用[Page] =>Encoding 参数来将默认输出格式更改为 ASCII: PS> Get-Process | Out-File -FilePath C:\\temp\\processlist.txt -Encoding ASCII \'\"> =>Out-file 将文件内容格式设置为和控制台输出格式样这样将导致在大多数情况下输出将像在控制台窗口中样发生截断例如如果运行以下命令: PS> Get-Command | Out-File -FilePath c:\\temp\\output.txt \'\"> 输出将和以下所示类似: CommandType Name Definition ----------- ---- ---------- Cmdlet Add-Content Add-Content [-Path] <String[... Cmdlet Add-History Add-History [[-InputObject] ... ... \'\"> 若要获得不强行进行换行以匹配屏幕宽度输出可以使用 =>Width 参数来指定行宽由于 =>Width 是 32 位整数参数因此其最大值为 2147483647键入以下命令可以将行宽设置为此最大值: Get-Command | Out-File -FilePath c:\\temp\\output.txt -Width 2147483647 \'\"> 如果希望按照控制台上所显示格式对输出进行保存 则 =>Out-File cmdlet 尤其有用若要更好地控制输出格式您需要使用更高级工具我们将在下章介绍这些工具并提供有关对象操作些详细信息 0
相关文章读者评论发表评论 |