我有一个简单的.bat文件,它执行一个exe文件,并在txt文件中传递一些参数。我如何在powershell脚本(.ps1文件)中实现相同的功能?
.bat文件内容:
@echo on
C:\Windows\System32\cmd.exe /C "C:\Program Files\BMC Software\AtriumCore\cmdb\server64\bin\cmdbdiag.exe" -u test -p test -s remedyar -t 41900 < "C:\Program Files\BMC Software\ARSystem\diserver\data-integration\batch\CleanupInputs.txt" > "C:\Program Files\BMC Software\ARSystem\diserver\data-integration\batch\Snow_Output\DailyOutput.log"
Exit 0
1条答案
按热度按时间agxfikkp1#
cmd.exe
中相同,但有一些重要的差异:注:
...
*字符编码注意事项:
Get-Content
不只是将文本文件的原始字节通过路径,它将内容 * 解码 * 为 *.NET字符串 *,然后通过管道逐行发送内容。如果输入文件缺少BOM,Windows PowerShell将采用活动ANSI编码,而PowerShell(Core)7+将采用UTF-8;您可以使用-Encoding
参数来明确指定编码。$OutputEncoding
首选项变量,默认为ASCII(!)在Windows PowerShell中,和UTF-8在PowerShell(核心)7+。>
-实际上是Out-File
的别名-用于将外部程序重定向到文件,因此会发生另一轮解码和编码:[Console]::OutputEncoding
中的字符编码,默认为系统的活动OEM代码页。Out-File
基于 its 默认编码对解码后的字符串进行 * 编码,在Windows PowerShell中为UTF-16 LE(“Unicode”),在PowerShell(Core)中为无BOM的UTF-8;要控制编码,您需要显式使用Out-File
(或Set-Content
)并使用其-Encoding
参数。另见:
&
,呼叫操作员重新执行跟踪:在批处理文件中使用
@echo ON
以及它与PowerShell的比较Set-PSDebug
-Trace 1
:@echo OFF
运行,以便在打印输出之前 * 不 * 回显每个命令本身。@echo ON
(或者完全省略@echo ON/OFF
语句)对于在执行过程中诊断问题很有帮助。Set-PSDebug -Trace 1
类似于@echo ON
,但它有一个缺点:命令的 * 原始源代码 * 被回显,这意味着你不会看到嵌入变量引用和表达式的 * 值 *-有关更多信息,请参阅this answer。