我有一个执行一些自动程序的Powershell脚本,我在每个脚本的末尾使用“Write-Host”来告诉技术用户该步骤已完成,但我意识到这有点难以阅读和跟踪,所以, ¿ 有没有办法输出粗体文本?
先感谢您。
大家好,提前感谢您抽出宝贵的时间;
我遇到了一个小问题。
我正在运行一个命令并将其通过管道传输到一个变量中,以便我可以操纵输出。
$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也是可以的。
Write-Host在可以针对任何合理主机实现运行的脚本中,是否有任何理智、可靠的契约指示在给定的 PowerShell 主机实现中是否受支持?
(假设我理解Write-Host和Write-Output/之间的区别,并且Write-Verbose我确实需要Write-Host语义,如果支持的话,对于这个特定的人类可读文本。)
我想尝试询问$Host变量,或$Host.UI/$Host.UI.RawUI但我发现的唯一相关差异是:
在$Host.Name:
$Host.Name = 'ConsoleHost'$Host.Name = 'Windows PowerShell ISE Host'$Host.Name = 'Default Host'在$Host.UI.RawUI:
$Host.UI.RawUI$null对于 的某些属性,ISE 不返回任何值(或)$Host.UI.RawUI,例如$Host.UI.RawUI.CursorSize$Host.UI.RawUI维护一个$Host.Name支持的值列表Write-Host似乎有点负担,尤其是现在 PowerShell 是跨平台的。我合理地希望脚本能够从任何主机调用,并且只做正确的事情。
我编写了一个脚本,可以从 PowerShell 命令提示符、ISE 或 SQL …
抱歉,如果我是一个愚蠢的 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 Cmdlet)用橙色写一些彩色文本Write-Host。
该参数似乎Orange没有可用的颜色-ForegroundColor,但是类似Write-Warning的命令能够以橙色显示某些内容。
cmd /批处理文件可以打开并关闭"echo".所以在PowerShell中,我有一堆"写主机"输出,我想在某处打开/关闭写主机以便于调试.
PowerShell有这样的功能吗?
例如,如果您在 powershell 会话中执行此命令
\nwrite-host \'hello\' -ForegroundColor \'red\' -BackgroundColor \'cyan\'\n\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n编辑:作为测试,我尝试了以下操作:
\nwrite-host \'hello\' -ForegroundColor \'red\' -BackgroundColor \'cyan\' -NoNewline; write-host \'world\' -BackgroundColor black\nRun Code Online (Sandbox Code Playgroud)\n当然,它会显示“HelloWorld”,而“World”则没有背景颜色,或更准确地说与默认颜色(黑色)相同。
\n如果我们再向前迈出一步,并在背景颜色设置为黑色后打印一个额外的空格,那么这不会达到预期的响应,IE 我们会在调整大小后看到背景颜色青色填充整行。
\n因此,我们需要某种不可见的字符来阻止背景颜色的溢出,或者需要一种我目前不知道的完全不同的方法。
\n我知道可以通过特殊装饰的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)
但是我在输出中收到错误,指出提供的消息参数应该以'字符开头.
如果我可以在消息正文中输出带有变量值部分的消息,请告诉我.
我有一个位于远程系统上的脚本。
在服务器“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)
现在我可以捕获返回代码,但输出仍然直接发送到控制台。这是我所能得到的。在我已经尝试过的一长串事情中,以下任何一项都不起作用:
这会产生输出:
> $result
code : 42
output :
PSComputerName : web12 …Run Code Online (Sandbox Code Playgroud) powershell exit-code powershell-remoting powershell-4.0 write-host
我查询 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 ×10
write-host ×10
console ×1
echo ×1
exit-code ×1
jobs ×1
output ×1
teamcity ×1
variables ×1