【发布时间】:2018-08-15 21:24:07
【问题描述】:
我尝试在远程机器上运行以下脚本,从第一行我得到正常输出,“命令成功”或类似的东西。对于第二个,它似乎可以正常工作,但输出间隔且不完整,缺少 4 行输出。
# This works as expected.
$output = Invoke-Command -ComputerName ServerName -ScriptBlock {auditpol /set /subcategory:"Registry" /success:enable /failure:enable}
# This creates double-spaced output and is missing the last 3 output lines.
$output = Invoke-Command -ComputerName ServerName -ScriptBlock {Subinacl.exe /verbose=1 /keyreg "HKEY_LOCAL_MACHINE\SYSTEM\Path" /sallowdeny="everyone"=SCD}
我想要第二个代码行的这个输出:
SYSTEM\Path : delete Audit ACE 0 \everyone
SYSTEM\Path : new ace for \everyone
HKEY_LOCAL_MACHINE\SYSTEM\Path : 2 change(s)
Elapsed Time: 00 00:00:00
Done: 1, Modified 1, Failed 0, Syntax errors 0
Last Done : HKEY_LOCAL_MACHINE\SYSTEM\Path
但是我得到了:
S Y S T E M \ P a t h : d e l e t e A u d i t A C E 0 \ e v e r y o n e
S Y S T E M \ P a t h : n e w a c e f o r \ e v e r y o n e
H K E Y _ L O C A L _ M A C H I N E \ S Y S T E M \ P a t h : 2 c h a n g e ( s )
没有我想看到的最后 3 行。我尝试将输出编码更改为 Unicode 或 UTF8,但不起作用。还有其他解决方案吗?
【问题讨论】:
-
您正在为两个不同的用例运行两个不同的工具,听起来您期望得到相同的结果,但这并不是真的。请在此处定义/澄清您要查找的内容。含义,成功和错误,并确定您在返回结果中的具体目标。否则我们只能假设。
-
@postanote 是的,有两种不同的工具。第二个给我带来了一些麻烦,因为输出不清楚。我已经编辑了问题:)
-
"我尝试将输出编码更改为 Unicode 或 UTF8 但不起作用。" - 问题是将文本编码为双字节编码(例如 PowerShell 的“Unicode " 但不是 "UTF8"),然后将其作为单字节编码读回,因此双字节显示为 char、space、char、space 等。stackoverflow.com/questions/33630299/… 描述了它以及您尝试过的修复 - 但是你在哪一边做出改变?也许您需要在调用 SubInAcl 之前将它放在脚本块中?
-
或者这里 social.technet.microsoft.com/Forums/ie/en-US/… 建议通过
cmd /c subinacl...运行它 -
@TessellatingHeckler 有趣的是,我将 Unicode 行放在 ScriptBlock 中,输出不再间隔,但仍然缺少最后 3 行。我也尝试了 cmd /c 选项,但它似乎不起作用
标签: powershell character-encoding stdout subinacl