问题标签 [write-host]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
107 浏览

powershell - "$xyz" 和 "Write-Host "$xyz"" 给出不同的输出

我正在对一个位置(原始文件夹)中的所有文件进行哈希处理,并将哈希值写入变量,然后对另一个位置(目标文件夹)中的所有文件执行相同操作:

然后我将它们与 Compare-Object 进行比较,如下所示:

现在在我的测试中我故意有偏差,所以当上面的代码没有返回差异时,我知道我有问题。

然后我发现如果我执行以下操作,则哈希值不存在:

但是,如果我只是键入以下内容并按 Enter,则存在哈希值(如我所愿):

我假设当我使用Compare-Object时,我的变量没有像我预期的那样呈现散列值。

有谁知道发生了什么或有什么建议?这用于确保文件从原始位置移动到目标位置(这是我正在处理的脚本中的一项检查)。我保留这个纯粹的 PowerShell,这意味着 noxcopyrobocopy.

0 投票
2 回答
863 浏览

powershell - 是否有一种简短的方法可以写入主机并将其保存到变量中?

我正在尝试以最短的方式Write-Host发送消息并将其保存到变量中。

目前我的代码如下所示:

当然它有效。我做了一个特殊的函数来压缩这个:

但是它没有在屏幕上产生任何输出。更重要的是,我认为必须有比新功能更好的解决方案来做到这一点。我试图找到一个。不成功。

有什么方法可以使该脚本短路吗?

0 投票
1 回答
354 浏览

powershell - 如何确定 Write-Host 是否适用于当前主机

在可以针对任何合理的主机实现运行的脚本中,是否有任何理智、可靠的合同规定是否Write-Host在给定的 PowerShell 主机实现中受支持?

(假设我理解Write-Hostand Write-Output/之间的区别,并且Write-Verbose我肯定想要Write-Host语义,如果支持的话,对于这个特定的人类可读文本。)

我想过尝试询问$Host变量,或者$Host.UI/$Host.UI.RawUI但我发现的唯一相关差异是:

  • $Host.Name

    • Windows powershell.exe 命令行有$Host.Name = 'ConsoleHost'
    • 伊势有$Host.Name = 'Windows PowerShell ISE Host'
    • SQL Server 代理作业步骤有$Host.Name = 'Default Host'
    • 我没有安装任何非 Windows 版本,但我希望它们有所不同
  • $Host.UI.RawUI

    • Windows powershell.exe 命令行返回所有属性的值$Host.UI.RawUI
    • ISE$null对 的某些属性不返回任何值(或 )$Host.UI.RawUI,例如$Host.UI.RawUI.CursorSize
    • SQL Server 代理作业步骤不返回任何值$Host.UI.RawUI
    • 同样,我无法签入任何其他平台

维护$Host.Name支持的值列表Write-Host似乎有点负担,尤其是现在 PowerShell 是跨平台的。我会合理地希望脚本能够从任何主机调用并且只是做正确的事情

背景

我编写了一个脚本,可以从 PowerShell 命令提示符、ISE 或 SQL Server 代理作业中合理运行。该脚本的输出完全是文本的,供人类阅读。从命令提示符或 ISE 运行时,输出使用Write-Host.

SQL Server 作业可以通过两种不同的方式设置,并且都支持将输出捕获到 SQL Server 代理日志查看器中:

  1. 通过 CmdExec 步骤,这是简单的命令行执行,其中 Job Step 命令文本是可执行文件及其参数,因此您调用 powershell.exe 可执行文件。捕获的输出是过程的标准输出/标准输出:

    /li>
  2. 通过 PowerShell 步骤,其中 Job Step 命令文本是由其自己的嵌入式 PowerShell 主机实现解释的原始 PS 脚本。捕获的输出是通过Write-Outputor写入的任何内容Write-Error

    /li>

由于 SQL Server 主机实现的其他一些弱点,我发现您可以使用Write-Output或发出输出Write-Error,但不能同时使用。如果作业步骤失败(即如果您throwWrite-Error 'foo' -EA 'Stop'),您只会在日志中获得错误流,如果成功,您只会在日志中获得输出流。

此外,嵌入式 PS 实现不支持Write-Host. 至少到 SQL Server 2016,Write-Host抛出一个System.Management.Automation.Host.HostException带有消息A command that prompt the user failed because the host program or the command type does not support user interaction

为了支持我所有的用例,到目前为止,我开始使用一个自定义函数Write-Message,该函数基本上设置为(简化):

从 SQL Server 2019(可能更早)开始,它似乎Write-Host不再在嵌入式 SQL Server 代理 PS 主机中引发异常,而是一个不向输出或错误流发出任何内容的空操作。由于没有例外,我的脚本Write-Message函数无法再可靠地检测它是否应该使用Write-HostStringBuilder.AppendLine

SQL Server 代理作业的基本解决方法是使用更成熟的 CmdExec 步骤类型(其中Write-OutputWrite-Host两者都被捕获为标准输出),但我更喜欢 PowerShell 步骤类型,因为(除其他原因外)它能够可靠地拆分命令多行,所以我很想看看是否有更全面的、基于 PowerShell 的方法来解决是否Write-Host对我所在的主机有用的问题。

0 投票
2 回答
302 浏览

powershell - PowerShell 开关参数未按预期工作

我有以下 PowerShell 函数来帮助我进行基准测试。这个想法是您提供命令和一个数字,该函数将运行代码该次数。之后,该功能将报告测试结果,例如最小、最大和平均所用时间。

问题出在switch参数$ShowOutput上。据我了解,当您提供 switch 参数时,其值为 true。否则是假的。但是,它似乎不起作用。看我的测试。

谁能帮忙解释一下吗?

0 投票
2 回答
650 浏览

powershell - 将测试路径输出重定向到文本文件

txt 文件只是一堆 UNC 路径,我试图在验证测试路径后从此文本文件中获取 UNC 路径列表,并将其放入另一个文本文件中。它在屏幕上显示经过验证的路径,但不会填充文本文件。

0 投票
3 回答
15747 浏览

powershell - 如何在PowerShell中输出粗体文本?

我有一个执行一些自动程序的Powershell脚本,我在每个程序的末尾使用“Write-Host”来告诉技术用户该步骤已完成,但我意识到有点难以阅读和跟踪所以, ¿ 有没有办法输出粗体文本?

先感谢您。

0 投票
2 回答
42 浏览

function - 带字符串消息的功能,回显到屏幕,更改消息的颜色

大家早上好,已 解决 两个响应齐头并进。非常感谢 Scepticalist 和 Wasif Hasan 提供的示例!

我有一个带有消息参数的日志记录功能。通过该函数,它以绿色的文本颜色写入消息。有没有办法改变日志的某些消息的颜色?下面是函数。

例如,调用 log 函数时,它会将消息回显为绿色文本,这很好。但是,如果我想使用日志记录功能将部分标题的文本更改为黄色,有没有办法做到这一点?下面是我想说的

0 投票
0 回答
36 浏览

powershell - 有条件地将输出写入文件以跟踪 pourposes

我有一个脚本,它接受“-outToFilename”作为非强制性参数,如果需要,可以在控制台和文件上都有一个日志。通常我使用这样的功能:

但是在玩Tee-Object时,我想知道是否可以有条件地将write-host cmdlet 的输出通过管道传输到 tee-object
像这样:


使用tee-Object进行编辑最好使用write-output,以便 Tee 可以从管道中获取值:
write-output $myMessage | 如果 ($logToFile) { $_ | tee -filePath $logToFile }

同样,在等待更好的解决方案时,当我需要有条件地输出到()控制台和文件时,我正在使用这个:

0 投票
0 回答
18 浏览

comments - 没有工作代码更改的Powershell有问题

我有几个工作代码点现在不再有效。这是一段代码:

我得到以下结果:

我尝试使用 Write-host 并得到相同的结果:

我也遇到了评论行的问题并得到以下信息:

我也有将哈希表返回给调用程序的问题,该程序有效且不再有效,如下所示:

0 投票
1 回答
432 浏览

regex - Powershell 在输出前修改 Select-Object 属性

我将如何从该 Select-Object 的 DiskAllocation 属性中删除前导“{Storage used:,”和尾随“}”,以便只保留大小?

例如:{Storage used:, 48.62 MB} 变为 48.62 MB

我知道我需要用正则表达式做一些替换语句,但我是 Powershell 的初学者。任何帮助,将不胜感激。

当前的输出如下所示:

输出