如何运行具有详细输出的 PowerShell 脚本?

2023-11-29

我想知道是否有一种方法可以运行 PowerShell 脚本,以便打印脚本每一行的命令和输出。例如,在 Bash 中你可以这样写bash -x myscript或放置一个set -x在脚本的顶部。在批处理中,您将省略@echo off传统上留在脚本的顶部。 PowerShell 是否具有与这些结构等效的结构?

我尝试过的事情:跑步powershell -? | sls verbose,结果什么也没发现。


只是为了表明,@JamesKo,如果你问错了问题,你就会得到错误的答案:-(。有几个人在这里基于 (a) 缺乏 Linux 接触和 (b) 你对这个术语的使用提出了善意的答案verbose。接下来,我将向您介绍 Linux 与 PowerShell 在这个主题上的关系,但如果您赶时间,请随时跳到最后的答案。 :-)

背景

在 PowerShell 中,verbose 具有非常具体的含义PowerShell 手册页甚至相当模糊:

显示有关执行的操作的详细信息 命令。此信息类似于跟踪或跟踪中的信息 交易日志。该参数仅在命令生成时起作用 一条详细的消息。

它甚至听起来像是你想要的......但是让我们将其与 Linux 文档进行比较set -x根据您对 Linux 的喜好,可能是这样的(来自手册页项目)...

shell 应在之后将每个命令的跟踪写入标准错误 它会在执行命令之前扩展命令。

或这个(来自gnu)...

打印简单命令的痕迹,对于命令,case命令,选择 命令,以及命令及其参数的算术或 关联词列表在展开之后和之前 被执行。

你问题的第一行清楚而简洁地与这些一致。但 PowerShell 中的 verbose 是不同的。简而言之,打开详细模式(无论是-Verbose命令行开关或$VerbosePreference变量)只是启用从详细流到控制台的输出。 (就像 Linux 提供两个流,stdout 和 stderr 一样,PowerShell 提供多个流:输出流、错误流、警告流、详细流和调试流。您可以以与 Linux 相同的方式使用这些流 - 您可以甚至使用,例如commands 4>&1例如,将详细流合并到标准输出。 (您可以在《基本写作流》部分中阅读有关 PowerShell 的多个输出流的更多信息PowerShell 一行:访问、处理和写入数据一个很好的快速参考是PowerShell 标点符号完整指南.)

答案

The 设置 PSDebug命令将为您提供与 bash 等效的跟踪。您甚至可以使用-Trace范围。首先,这是控件,在使用之前Set-PSDebug:

PS> Get-PSDepth
0

值为1您会在执行时获得每一行代码,例如:

PS> Set-PSDebug -Trace 1
PS> Get-PSDepth
DEBUG:    1+  >>>> Get-PSDepth
DEBUG:  141+  >>>> {
DEBUG:  142+   >>>> $nest = -1
DEBUG:  143+   >>>> $thisId = $pid
DEBUG:  144+  while ( >>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG:  145+    >>>> $thisId = (gwmi win32_process -Filter "processid='$thisId'").ParentProcessId
DEBUG:  146+    >>>> $nest++
DEBUG:  144+  while ( >>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG:  148+   >>>> $nest
0
DEBUG:  149+  >>>> }

值为2您还可以获得变量分配和代码路径:

PS> Set-PSDebug -Trace 2
PS> Get-PSDepth
DEBUG:    1+  >>>> Get-PSDepth
DEBUG:     ! CALL function '<ScriptBlock>'
DEBUG:  141+  >>>> {
DEBUG:     ! CALL function 'Get-PSDepth'  (defined in file 'C:\Users\msorens\Documents\WindowsPowerShell\profile.ps1')
DEBUG:  142+   >>>> $nest = -1
DEBUG:     ! SET $nest = '-1'.
DEBUG:  143+   >>>> $thisId = $pid
DEBUG:     ! SET $thisId = '9872'.
DEBUG:  144+  while ( >>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG:  145+    >>>> $thisId = (gwmi win32_process -Filter "processid='$thisId'").ParentProcessId
DEBUG:     ! SET $thisId = '10548'.
DEBUG:  146+    >>>> $nest++
DEBUG:     ! SET $nest = '0'.
DEBUG:  144+  while ( >>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG:  148+   >>>> $nest
0
DEBUG:  149+  >>>> }

这些是我编写的一个名为的简单 cmdlet 的痕迹Get-PSDepth。它使用以下命令打印命令、分配等DEBUG前缀,与实际输出混合在一起,在本例中是仅包含的单行0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何运行具有详细输出的 PowerShell 脚本? 的相关文章

随机推荐

  • 使用 SearchView 实现自定义搜索

    我想在我的应用程序中实现搜索 但我不想使用单独的活动来显示我的搜索结果 相反 我只想使用显示在下方的建议列表SearchView 我可以用setOnQueryTextListener on the SearchView 聆听输入并搜索结果
  • Rails 4:heroku 基本计划上的 ConnectionTimeoutError

    我们正在研究一个简单的 Rails 4 网络应用程序 由 Heroku 托管 免费计划 最近 我们正在经历一些ActiveRecord ConnectionTimeoutError 每隔几天就会发生一次 我们并不真正了解其背后的原因 您可能
  • Laravel 5 路由分页 url 编码问题

    我构建了一个 Laravel 5 应用程序 现在正在测试它如何处理不同的输入 因此我遇到了一个奇怪的问题 在标题中我有一个搜索字段 它返回结果 按 10 分页 问题 如果用户输入一个字母 例如英语中的 e 一切都会正常 但是 当用户输入字母
  • 使用正则表达式重新字符串匹配提取 URL 链接 - Python

    我一直在尝试使用 re api 从文本文件中提取 URL 任何以 http https 和 www 开头的链接 该文件包含文本以及 html 源代码 html 部分很容易 因为我可以使用 BeautifulSoup 提取它们 但普通文本似乎
  • 工作窃取算法[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在读一篇关于并发运行时的文章 其中有一个算法名为work stealing在本文中 但我不知道这个算法是什么 所以我想要一些解释或一些好的链接来帮助我介绍这个算法 这些有帮助
  • R错误:要替换的项目数不是替换长度R的倍数

    我编写了以下代码并收到错误 要替换的项目数不是代码行中替换长度的倍数 X after count c censN1 censN2 censN3 网上查了一下 发现问题可能是由于预先确定的样本数量不匹配造成的 n samples of NA和
  • 如何通过不同端口(80 除外)启动 nginx

    你好 我是 nginx 的新手 我尝试在我的服务器 运行 Ubuntu 4 上设置它 该服务器已经运行了 apache 所以之后我apt get install它 我尝试启动nginx 然后我收到这样的消息 Starting nginx t
  • 致命错误和非致命错误之间的区别

    当尝试编译代码时 IDE 中显示的致命错误和非致命错误之间的主要区别是什么 在这两种情况下 编译器都会显示错误消息 并且程序不会被编译 致命错误是编译器或链接器中未定义的编译器错误吗 A 致命错误可能会立即停止编译该翻译单元 编译器可能会在
  • 请求实体太大 PHP

    在我的 CakePHP 站点之一中 我收到此错误 请求的实体太大 我不知道出了什么问题 我认为我通过表单发布的数据太大 我在搜索引擎中搜索了这个 发现我必须增加post max size 默认情况下我认为它设置为8M 但不知道如何增加pos
  • Puppeteer - 协议错误 (Page.navigate):目标已关闭

    正如您在下面的示例代码中看到的 我使用 Puppeteer 和 Node 中的一组工作人员来通过给定 URL 运行多个网站屏幕截图请求 const cluster require cluster const express require
  • JsonMappingException:当前令牌不是 START_OBJECT(需要解开根名称“Transaction[]”),而是 START_ARRAY

    我正在使用Spring的休息模板来消耗充电接口 使用 JSON 作为负载格式 它一直进行得很顺利 但是当我尝试获取对象数组时 它惨败了 例如 请考虑以下情况 Transaction transactions restTemplate get
  • 为什么分配一个任务然后等待它允许并行运行[重复]

    这个问题在这里已经有答案了 我一直在玩异步 我遇到了一些我以前没有注意到的行为 如果这是重复的 请告诉我 但我的谷歌福让我失败了 主要是因为我想不出合适的搜索条件 给定一个简单的异步方法来执行一些参数化工作 async Task
  • 如何在Google新的NavigationView中将MenuItem添加到SubMenu?

    我为抽屉菜单制作了一个 xml 其中包含以下 MenuItem
  • 导入时 EF4 去除表前缀

    我正在尝试自动重命名表名称以去掉 EF4 中的前导前缀 我知道这可以在 GUI 中完成 但是 我的公司在 Visio 中创建了数据库架构 并使用它在 SQL 中创建数据库创建脚本 我们经常这样做 有时有很多表 所以使用 GUI 并不是一个理
  • 在本地运行时更改 localhost 域

    我正在使用 Visual Studio 因为我的 IDE 正在开发 net Web 应用程序 我使用本地 IIS7 Web 服务器来运行该应用程序 它在 url gt 下运行http localhost 应用程序名称 我想将其更改为 gt
  • .net 中是否有现有的库可以将 JSON 解析为 Dictionary

    我希望能够将表示对象的 JSON 字符串解析到可以在 C 中使用的属性包 如字典 中 给定这个字符串 id 1 name 某个名称 某个参数 2 我想最终得到一个字典 其中包含 id name 和 some parameter 作为键 并分
  • mtcars ggplot 不知道如何处理类数字

    我只是想使用 mtcars 和 ggplot 制作一个简单的绘图 ggplot data mtcars aes x mpg y hp geom line mpg hp col cyl 但我收到错误 ggplot 不知道如何处理类数字 到底是
  • 如何在MS Access查询中直接使用系统用户名?

    我想知道是否有办法获取系统用户名并直接在 MS Access 查询中使用它 我已经在表单上的组合框的查询中设置了参数 并且还使用 ENVIRON 用户名 在 Access VBA 中获取了系统名称 请告诉我这是否可能 您需要创建一个返回用户
  • 是否可以使用变量作为格式中的填充参数!宏?

    我想模仿Python的rjust ljust and center函数使用format 宏 但我只能找到一个可以传递字符串和宽度的解决方案 如果你想传递 fill argument 是行不通的 文档告诉我可以提供变量format 对于宽度参
  • 如何运行具有详细输出的 PowerShell 脚本?

    我想知道是否有一种方法可以运行 PowerShell 脚本 以便打印脚本每一行的命令和输出 例如 在 Bash 中你可以这样写bash x myscript或放置一个set x在脚本的顶部 在批处理中 您将省略 echo off传统上留在脚