PowerShell 中的 echo 和 Write-Host 有什么区别?

2024-04-25

我对之间的区别感到困惑echo and Write-Host在 PowerShell 中。我有两个文件,POC.ps1 & validatePath.ps1。这些文件位于我的本地计算机上,我使用以下命令在远程计算机上运行它们Invoke-Command。我正在使用 PowerShell v3.0。

要执行这两个脚本,我使用以下命令:

.\POC.ps1 -filename C:\Users  -user Blaine

这是两个文件:

POC.ps1:

param($filename, $user)

echo $filename
echo "This"
echo $user

$responseObject = Invoke-Command testcomputer -FilePath .\validatePath.ps1  -ArgumentList($filename, $user) -AsJob

while($responseObject.State -ne "Completed")
{

}

$result = Receive-Job -Id $responseObject.Id -Keep
echo $result

这就是事情变得奇怪的地方......

验证路径.ps1:

Param([string] $filename,
      [string] $user)

function ValidatePath( $filename, $user, $fileType = "container" )
{
    Write-Host "This is the file name: $filename"
    Write-Host "This is user: $user"  <--- Notice I'm using Write-Host here
    $fileExist = $null
    if( -not (test-path $filename -PathType $fileType) )
    {
        throw "$user, the path $filename does not exist!"

    }
    else
    {
         Write-Host "This is the second part"
         echo $filename found!
    }
    Write-Host "This is the third part"
    return $fileExist
}


try
{

    ValidatePath($filename, $user)
}
catch
{
    $e = $_.Exception
    echo $e
}

当我运行上面的脚本时,输出如下:

C:\Users
This
Blaine
This is the file name: C:\Users Blaine
This is user:  <--- Notice where this line is?
This is the second part
This is the third part
C:\Users
Blaine
found!

但如果我改变validatePath.ps1对此:

Param([string] $filename,
      [string] $user)

function ValidatePath( $filename, $user, $fileType = "container" )
{
    Write-Host "This is the file name: $filename"
    echo "This is user: $user" <---notice I'm using Echo here
    $fileExist = $null
    if( -not (test-path $filename -PathType $fileType) )
    {
        throw "$user, the path $filename does not exist!"

    }
    else
    {
         Write-Host "This is the second part"
         echo $filename found!
    }
     Write-Host "This is the third part"
    return $fileExist
}


try
{

    ValidatePath($filename, $user)
}
catch
{
    $e = $_.Exception
    echo $e
}

这是输出:

C:\Users
This
Blaine
This is the file name: C:\Users Blaine
This is the second part
This is the third part
This is user: <---- Notice where this line is now?
C:\Users
Blaine
found!

您会注意到“这是用户:”这一行位于不同的位置。为什么是这样?为什么echo工作方式不同于Write-Host?

UPDATE:

更奇怪的是,如果我像这样重新运行脚本两次:

POC.ps1:

param($filename, $user)

echo $filename
echo "This"
echo $user

$responseObject = Invoke-Command CAPTESTPK01 -FilePath .\validatePath.ps1  -ArgumentList $filename, $user -AsJob

while($responseObject.State -ne "Completed")
{

}

$result = Receive-Job -Id $responseObject.Id -Keep
echo $result


$filename = "C:\saddfasdfj"

#Here I run the command again, using a different file name
$responseObject = Invoke-Command CAPTESTPK01 -FilePath .\validatePath.ps1  -ArgumentList $filename, $user -AsJob

while($responseObject.State -ne "Completed")
{
   if($responseObject.State -eq "Failed")
   {
        echo "Failed"
        $result = Receive-Job -Id $responseObject.Id -Keep
        echo $result
        break
   }
}

$result = Receive-Job -Id $responseObject.Id -Keep
echo $resul

使用时它给了我这个输出echo in validatePath.ps1:

C:\Users
This
Blaine
This is the file name: C:\Users
This is the second part
This is the third part
This is user: Blaine <---- This line is here
C:\Users
found!
This is the file name: C:\saddfasdfj
This is user: Blaine <---- But now it's here, where it should be? Wth?
Blaine, the path C:\saddfasdfj does not exist!

echo是一个别名Write-Output,写入成功输出流。这允许通过管道处理输出或将输出重定向到文件中。Write-Host直接写入控制台,因此无法进一步重定向/处理输出。

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

PowerShell 中的 echo 和 Write-Host 有什么区别? 的相关文章

  • BackgroundWorker 如何决定在哪个线程上运行 RunWorkerCompleted 处理程序?

    我试图弄清楚 BGW 在工作完成后如何决定运行 RunWorkerCompleted 处理程序的线程 我的初始测试使用 WinForm 应用程序 在 UI 线程上 我开始bgw1 RunWorkerAsync 然后我尝试开始bgw2 Run
  • 在库中使用 .Net Standard 1.4 并在应用程序中使用 .Net Framework 4.6.1 时,无法加载文件 System.IO.FileSystem,版本=4.0.1.0

    我有一个包含一个库和两个应用程序的解决方案 这些应用程序代表同一个程序 其中一个针对通过 UAP10 的 Windows App Store 构建 另一个针对使用 Net Framework 4 6 1 的 Microsoft Window
  • ComponentOne 3D 曲面地图的替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在为我们正在进行的一个新项目研究替代控制库 要求之一是以表面图的形式显示数据 如下面的 Comp
  • 获取 SecureString 作为纯文本参数

    我正在尝试将 SecureString 作为纯文本参数获取到命令行 PowerShell 我知道安全字符串的形式是什么 例如 字符串 abc 将是安全字符串 71289371289 然后 我想将 71289371289 作为参数传递给脚本
  • Windows下如何分配非分页内存

    当我使用 cudaHostAlloc 时 它将分配非分页 固定 页面锁定 内存 我想知道如何在没有 cuda 的情况下仅使用 Windows SDK 来做到这一点 None
  • 将 CSV 文件上传到 SQL 服务器

    上传大文件的最佳方式是什么csv使用 C 将数据文件导入 SQL Server 该文件包含大约 30 000 行和 25 列 首先 你不需要编程的东西 您可以使用 SQL 管理工具直接将 CSV 文件上传到 SQL 数据库 但是 如果您确实
  • 如何在 C# 中搜索 Excel 文件

    我正在使用的代码 private void OpenExcelFile Excel Application exlApp new Microsoft Office Interop Excel Application if exlApp nu
  • .NET csc 和 Mono mcs 的兼容性

    我知道 NET 和 Mono 是二进制兼容的 但给定一组源代码 csc 和 mcs 会生成完全相同的 100 相同的二进制 CLI 可执行文件吗 人们能够判断可执行文件是用 csc 还是 mcs 编译的吗 很多东西在规范中没有完全定义 或者
  • 使用命令提示符查找 CPU 数量和每个 CPU 的核心数

    我正在尝试使用命令提示符检索 CPU 数量和每个 CPU 的核心数 我已经执行了以下命令 wmic cpu get NumberOfCores NumberOfLogicalProcessors Format List 我收到此错误 wmi
  • 前景色中的 Alpha

    我想在标签控件中创建文本的淡入淡出效果 我更改了标签前景色中的 Alpha 值 但它不受影响 我在这里看到同样的问题 http phorums com au showthread php 190812 Alpha value of the
  • 在 Windows 中使用 OpenAI API 密钥时出现问题

    我必须在自定义数据集上微调 OpenAI 模型 我已经创建了 jsonl 格式的数据集 我在 Windows 命令行上使用以下命令 set OPENAI API KEY
  • VS2010 .NET 内存分析 - 非常慢

    运行 VS2010 的 NET 内存分配分析需要很长时间才能完成 该程序本身运行了大约 3 分钟并生成了 35GB 的内存分配 探查器的输出文件约为 28GB 报告分析流程接管三个小时 在具有 8GB RAM 的双 Xeon 上 即可完成
  • .NET Web 服务 (asmx) 超时问题

    我正在连接到供应商提供的 Web ASMX 服务并通过线路发送一组数据 当您向项目添加服务引用时 我的第一次尝试遇到了 Visual Studio 默认在 app config 文件中引发的 1 分钟超时 我把它增加到 10 分钟 又是一次
  • Powershell脚本运行带有参数的exe文件

    我需要脚本来运行带参数的 exe 文件 我就是这么写的 请问有更好的方法吗 Command Networkpath Restart exe Parms t 21600 m 360 r f Prms Parms Split Command P
  • 将“-Filter”与变量一起使用

    我尝试过滤掉这样的东西 Get ADComputer Filter name like chalmw dm and Enabled eq true 这就像一个魅力 并且得到了我想要的 现在我想要 类似名称 部分作为变量 如下所示 Get A
  • 如何使用 SqlDataReader 返回和使用 IAsyncEnumerable

    请看下面两种方法 第一个返回一个IAsyncEnumerable 第二个试图消耗它 using System Collections Generic using System Data using System Data SqlClient
  • 检查远程计算机上的进程所有者,并在所有者为 xyz 时将其终止

    嘿 我想在远程计算机上检查特定进程的进程所有者 并在所有者是 xyz 时杀死它 我已经成功地检查了它的主人 但我不知道当主人是 xyz 时如何杀死它 到目前为止我所拥有的 get wmiobject computername remoteP
  • .NET 查询字符串值的正则表达式

    我需要从 Url PathAndQuery 中删除任何 id SomeValue 其中 SomeValue 可以是整数或字符串 它后面可能有也可能没有另一个 符号 所以它可能是 somepage aspx cat 22 id SomeId
  • 隐藏错误报告窗口

    我有以下问题 我的 ASP Net 应用程序接收简单控制台程序的 C 源代码 使用 cl exe 命令行 VC 编译器 对其进行编译 并使用 System Diagnostics Process 运行它 ASP Net应用程序运行在PC上
  • python:Windows终端中的unicode,使用的编码?

    我在 Windows 7 终端中使用 Python 解释器 我正在尝试了解 unicode 和编码 I type gt gt gt s gt gt gt s x89 gt gt gt u u gt gt gt u u xeb 问题1 字符串

随机推荐

  • VBA 和 GetRawInputDeviceList

    我正在 Access 2013 中工作 并尝试获取 VBA 的 GetRawInputDeviceList GetRawInputDeviceInfo RegisterRawInputDevices 和 GetRawInputData 等效
  • 从 XUL 运行 JavaScript 代码的单元测试 - 什么以及如何

    我正在编写一个 XUL 应用程序 它不是 Firefox 扩展 而是通过 XULrunner 使用的独立应用程序 我的目的是在我的开发过程中采用 TDD 我正在考虑犀牛单位 http code google com p rhinounit
  • 官方 OpenCL 2.2 标准是否支持 WaveFront?

    众所周知 AMD OpenCL 支持 WaveFront 2015 年 8 月 http amd dev wpengine netdna cdn com wordpress media 2013 12 AMD OpenCL Programm
  • Java 和 .NET 技术/框架的类似物

    我在一家主要由 Java 和 NET 技术人员组成的商店工作 在讨论新的解决方案和架构时 我们经常会在尝试比较两个阵营之间使用的各种技术 框架 API 等时遇到阻力 似乎每个阵营都对对方知之甚少 我们最终将苹果与橙子进行比较 而忘记了蒲式耳
  • Struts2 + 完整 Hibernate 插件 --> 会话已关闭?

    与这个问题相关 答案并没有真正切中要点 Hibernate with Struts2 有用的 Hibernate 插件或其他关闭会话的方法 https stackoverflow com questions 5901137 hiberate
  • Java 数组与泛型

    假设一个超类 America 及其两个子类 South America 和 North America Case 1 对于数组 America am new SouthAmerica 10 why no compiler error am
  • 由于“清理构建映像时出现未处理的错误”,无法部署 Cloud Functions

    我已经部署了数百个功能 这是我第一次遇到这个问题 简单地说 它停止部署功能流程 并表示 清理构建映像时出现未处理的错误 如果不加以纠正 这可能会导致每月产生少量账单 您可以尝试通过重新部署来删除这些映像 也可以在以下位置手动删除它们 htt
  • 更改时为 UITableView 动画重新加载数据

    我有一个有两种模式的 UITableView 当我们在模式之间切换时 我有不同数量的部分和每个部分的单元格 理想情况下 当表格增大或缩小时 它会执行一些很酷的动画 这是我尝试过的代码 但它没有执行任何操作 CGContextRef cont
  • 根据列值对数据行进行分组[重复]

    这个问题在这里已经有答案了 是否可以根据子数组中的值对行进行分组 Array Array 4f5hfgb gt Array 0 gt ACME 1 gt 4f5hfgb 2 gt Aberdeen sdf4ws gt Array 0 gt
  • 组装:如何从 json/yaml 生成页面?

    如果提供布局 有没有办法从 json yaml 生成页面 我认为这是可能的 但在文档中找不到 目前正在 GitHub 中对此进行跟踪 http webb li QjTX http webb li QjTX 自从options pages功能
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • 调整大小程序 检测到一个或多个无效文件名

    我无法消除 Visual Studio for Mac 2022 v17 中 net maui 应用程序中的此生成错误 构建输出显示 usr local share dotnet packs Microsoft Maui Resizetiz
  • 将 txt 文件转换为字典

    我有一个文本文件 我需要将所有偶数行放入字典键 将所有偶数行放入字典值 我的问题的最佳解决方案是什么 int count lines 1 Dictionary
  • Laravel 从模型插入数百万数据库行

    我有一个文本文件 其中包含逗号分隔的值 表示字符串中每一行的数据集 它们大约有 200 万个 我想解析字符串 根据它们创建 Laravel 模型 并将每个模型作为一行存储在我的数据库中 此时 我有一个类逐行解析文件并为每个文件创建一个模型
  • 如何判断全屏应用程序是否正在运行?

    python 是否可以判断 linux 上的全屏应用程序是否正在运行 我感觉使用 Xlib 可能是可行的 但我还没有找到方法 EDIT 我所说的全屏是指整个屏幕 除了应用程序之外 没有其他任何内容 例如全屏游戏 如果您有兴趣在支持下运行所有
  • 从简单的 POST 请求到 node.js 的响应中出现“意外的输入结束”消息

    我编写了一个简单的 node js 程序来演示我在其他地方遇到的问题 给出以下 Node js 程序 var http require http http createServer function req res simple repro
  • 如何在 xml android 中绘制半边框

    我想画一个这样的边框带边框的编辑文本 https i stack imgur com ubwqF png 我的代码如下
  • 哈希链接重新加载页面

    我有一个安装在第三方网站上的代码片段 我无法了解详细信息 但它通过使用 a 将 HTML CSS 和 JS 加载到页面上
  • 如何添加私有 github 存储库作为 Composer 依赖项

    我在 Laravel 5 1 项目的composer json 中有以下内容 用于添加公共 github 存储库作为依赖项 repositories type package package name myVendorName my pri
  • PowerShell 中的 echo 和 Write-Host 有什么区别?

    我对之间的区别感到困惑echo and Write Host在 PowerShell 中 我有两个文件 POC ps1 validatePath ps1 这些文件位于我的本地计算机上 我使用以下命令在远程计算机上运行它们Invoke Com