标签: write-host

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

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

先感谢您。

powershell windows-scripting write-host

9
推荐指数
2
解决办法
1万
查看次数

Powershell同时通过管道传输到变量和写入主机

大家好,提前感谢您抽出宝贵的时间;

我遇到了一个小问题。

我正在运行一个命令并将其通过管道传输到一个变量中,以便我可以操纵输出。

$variable = some command
Run Code Online (Sandbox Code Playgroud)

这通常工作正常,但不会将发生的情况输出到屏幕上,这在大多数情况下都很好。然而,有时此命令需要一些用户输入(例如“是”或“否”或“跳过”),并且由于它实际上并未将任何内容通过管道传输到命令窗口,因此它只是挂在那里,而不是提示用户。如果你知道会发生什么,你可以点击 y 或 n 或 s,它就会正常进行。

是否有办法运行该命令,以便将输出通过管道传输到变量并显示在屏幕上?我已经尝试过:

($variable = some command) 
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

write-host ($variable = some command) 
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用。请注意,运行的命令不是本机 Windows 或 shell 命令,我不能连续运行它两次。

澄清一下(因为我可能不清楚)

我也尝试过:

$variable = some command : Out-host
Run Code Online (Sandbox Code Playgroud)

$variable = some command | out-default
Run Code Online (Sandbox Code Playgroud)

及其所有参数,但命令中的“提示”(写 y、n、s)没有显示。

能自动通过S也是可以的。

variables powershell output write-host

6
推荐指数
1
解决办法
1万
查看次数

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

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

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

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

  • $Host.Name

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

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

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

背景

我编写了一个脚本,可以从 PowerShell 命令提示符、ISE 或 SQL …

powershell powershell-hosting write-host

6
推荐指数
1
解决办法
291
查看次数

为什么 Write-Host 在 powershell 作业中运行时不起作用?

抱歉,如果我是一个愚蠢的 powershell 菜鸟,但是作业显然无法写入终端有什么问题吗?我该如何解决这个问题?

# test.ps1
function myjob {
    Write-Host "Hello, World!" # doesn't show
}
Start-Job -Name MyJob -ScriptBlock ${function:myjob}
Wait-Job MyJob
Remove-Job MyJob
Run Code Online (Sandbox Code Playgroud)

powershell jobs write-host

6
推荐指数
1
解决办法
5086
查看次数

用Write-Host用橙色写文本

我想知道是否有可能用(或另一个PowerShell Cmdlet)用橙色写一些彩色文本Write-Host

该参数似乎Orange没有可用的颜色-ForegroundColor,但是类似Write-Warning的命令能够以橙色显示某些内容。

powershell write-host

5
推荐指数
1
解决办法
1141
查看次数

PowerShell有"echo off"和"echo on"触发器吗?

cmd /批处理文件可以打开并关闭"echo".所以在PowerShell中,我有一堆"写主机"输出,我想在某处打开/关闭写主机以便于调试.

PowerShell有这样的功能吗?

powershell echo write-host

5
推荐指数
2
解决办法
4万
查看次数

当在 powershell 中调整窗口大小时,具有背景颜色的 Write-Host 用背景颜色填充整行

例如,如果您在 powershell 会话中执行此命令

\n
write-host \'hello\' -ForegroundColor \'red\' -BackgroundColor \'cyan\'\n\n
Run Code Online (Sandbox Code Playgroud)\n

调整窗口大小会导致背景颜色填充整行:

\n

在此输入图像描述

\n

我已经在 Windows 终端、Windows 控制台和 Fluent 终端中对此进行了测试,它们都表现出这种行为。(我猜测可能有一个虚拟终端序列/ANSI 代码来解决这个问题,但我不知道这可能是什么)。

\n

那么,我们怎样才能防止这种情况发生呢?

\n
\xce\xbb $PSVersionTable\n\nName                           Value\n----                           -----\nPSVersion                      7.1.1\nPSEdition                      Core\nGitCommitId                    7.1.1\nOS                             Microsoft Windows 10.0.19041\nPlatform                       Win32NT\nPSCompatibleVersions           {1.0, 2.0, 3.0, 4.0\xe2\x80\xa6}\nPSRemotingProtocolVersion      2.3\nSerializationVersion           1.1.0.1\nWSManStackVersion              3.0\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:作为测试,我尝试了以下操作:

\n
write-host \'hello\' -ForegroundColor \'red\' -BackgroundColor \'cyan\' -NoNewline; write-host \'world\' -BackgroundColor black\n
Run Code Online (Sandbox Code Playgroud)\n

当然,它会显示“HelloWorld”,而“World”则没有背景颜色,或更准确地说与默认颜色(黑色)相同。

\n

如果我们再向前迈出一步,并在背景颜色设置为黑色后打印一个额外的空格,那么这不会达到预期的响应,IE 我们会在调整大小后看到背景颜色青色填充整行。

\n

因此,我们需要某种不可见的字符来阻止背景颜色的溢出,或者需要一种我目前不知道的完全不同的方法。

\n

console powershell write-host

5
推荐指数
1
解决办法
2076
查看次数

从PowerShell输出带有可变部分的消息到TeamCity构建日志

我知道可以通过特殊装饰的Write-Host将消息输出到TeamCity构建日志:

write-host "##teamcity[message text='Prepearing backup folder']" 
Run Code Online (Sandbox Code Playgroud)

如果我需要消息包含变量的值,该怎么办?

我尝试过以下方法:

$myFullMessage = "Perpearing backup folder at: " + $path
write-host "##teamcity[message text=$myFullMessage]" 
Run Code Online (Sandbox Code Playgroud)

但是我在输出中收到错误,指出提供的消息参数应该以'字符开头.

如果我可以在消息正文中输出带有变量值部分的消息,请告诉我.

powershell teamcity write-host

3
推荐指数
1
解决办法
3842
查看次数

从远程系统上的 Invoke-Command 捕获 Write-Host 输出和退出代码

我有一个位于远程系统上的脚本。

在服务器“web12”上的 C:\tmp\hgttg.ps1 下:

 Write-Host "Don't Panic"
 exit 42
Run Code Online (Sandbox Code Playgroud)

我使用 Invoke-Command 从本地机器(两个系统都运行 v4.0)调用此脚本:

$svr = "web12"
$cmd = "C:\tmp\hgttg.ps1"
$result = Invoke-Command -ComputerName $svr -ScriptBlock {& $using:cmd}
Run Code Online (Sandbox Code Playgroud)

执行时会产生以下输出:

> $result = Invoke-Command -ComputerName $svr -ScriptBlock {& $using:cmd}
Don't Panic
> $result
>
Run Code Online (Sandbox Code Playgroud)

($result未设置,输出直接到控制台,不好!)经过大量的网络搜索和故障排除,我得到了一些改进:

> $result = Invoke-Command -ComputerName $svr -ScriptBlock {& $using:cmd; $LASTEXITCODE}
Don't Panic
> $result
42
>
Run Code Online (Sandbox Code Playgroud)

现在我可以捕获返回代码,但输出仍然直接发送到控制台。这是我所能得到的。在我已经尝试过的一长串事情中,以下任何一项都不起作用:

  • 使用“Invoke-Expression”和 -OutVariable out 代替“&”;新对象 -TypeName PSCustomObject -Property @{code=$LASTEXITCODE; 输出=$out}

这会产生输出:

> $result
code           : 42
output         : 
PSComputerName : web12 …
Run Code Online (Sandbox Code Playgroud)

powershell exit-code powershell-remoting powershell-4.0 write-host

3
推荐指数
1
解决办法
5372
查看次数

如何在 powershell 数组中写入托管元素的单个属性?

我查询 Office365 以获取与Chris的 displayName 匹配的所有用户的列表。

我想提示用户他们想要选择哪个克里斯。这样做时,我有以下 for..each 代码

$tmpUserOffice = Get-MsolUser -SearchString "*Chris*"
if ($tmpUserOffice -is [array])
{
    if ($tmpUserOffice.Count -lt 50) {
        Write-Host "Many matching users in MSOL. Choose which one you want to save"    
        for ($i = 0; $i -lt $tmpUserOffice.Count; $i++) {
            Write-Host $i " "  $($tmpUserOffice[$i].DisplayName) 
        }   
        Write-Host $tmpUserOffice.Count " None of the above" 
        $chosen = Read-Host

        if ($chosen -eq $tmpUserOffice.Count) {
            Write-Warning "Nothing found. Try searching with different criteria or use wildcards"
            Write-Output $null …
Run Code Online (Sandbox Code Playgroud)

powershell write-host

3
推荐指数
1
解决办法
8215
查看次数