【问题标题】:Powershell running as administrator refuses to redirect STDOUT to file以管理员身份运行的 Powershell 拒绝将 STDOUT 重定向到文件
【发布时间】:2014-04-25 20:04:09
【问题描述】:

作为练习,我正在尝试为 Hyper-V 制作一个 Web 控制面板。它将使用 Powershell 与 Hyper-V 交互。

我尝试做的第一件事是使用 Get-VM 命令创建一个表,其中包含本地计算机上所有 VM 的状态。我从 PHP 运行 Get-VM:

$output = `powershell Get-VM`;

$output 变为 NULL。经过大量故障排除后,我意识到除非 Powershell 以管理员身份运行,否则 Get-VM 不会提供输出(我正在以管理员身份运行我正在测试的 Powershell 实例,但由 PHP 创建的实例没有运行作为管理员)。

然后,我进入powershell.exe文件,右键单击它,进入属性->兼容性->更改所有用户的设置,并选中“以管理员身份运行”。无论从哪里开始,这都应该使其以管理员身份运行,并且在这种情况下似乎也确实如此。但是,一旦 Powershell 以管理员身份运行,它不会输出到文件,即使 > 操作员告诉它这样做。

如果我运行powershell Get-VM > out.txt,当powershell 以管理员身份运行时,它会创建文件out.txt,但它是0kb 并且不包含任何内容。 powershell Get-Process > out.txt 有同样的结果,一个 0kb 的文件。

使用非提升的 powershell.exe 运行 powershell Get-Process > out.txt 会产生预期的结果,即 out.txt 中 Get-Process 的输出。但是,您不能使用 powershell Get-VM > out.txt 执行此操作,因为除非以管理员身份运行 powershell,否则 Get-VM 不会返回任何数据。

总结一下,我的问题是,如果 Powershell 以管理员身份运行,为什么它拒绝将其 STDOUT 重定向到文件,但如果它以普通用户身份运行,则不会?

【问题讨论】:

  • 我无法使用 PowerShell v3 或 v4 复制该问题。我打开了一个提升的 CMD 窗口,然后运行 ​​powershell get-process > c:\temp\out.txt 并在文件中得到了预期的结果。
  • 当您运行powershell Get-Process > out.txt 时,您从什么运行它? PowerShell 的另一个实例? cmd.exe?重定向由您运行的任何环境处理。试试powershell -command "& {Get-VM > c:\out.txt}"
  • 另外,您确定您没有在快捷方式上设置“以管理员身份运行”属性吗?在 FileExplorer 中,当我在 C:\Windows\System32\WindowsPowerShell\v1.0 目录中右键单击 PowerShell.exe 时,我看不到任何兼容性选项卡或设置始终以管理员身份运行的方法。跨度>
  • TheMadTechnician:我也明白。当您从非提升的 CMD 提示符调用它时会出现问题,但 powershell.exe 本身设置为以管理员身份运行。这对于用例来说是“正确的”,因为 PHP 的 shell_exec 没有被提升。 Keith Hill:我从哪里运行它似乎并不重要,无论是 PHP shell_exec、PHP exec、反引号运算符、CMD 还是 Powershell 本身。
  • 关于快捷方式的东西:不,它没有设置在快捷方式上。似乎 Windows 进行了某种检查,以防止您将其设置为以管理员身份运行。但是,如果您将文件复制到另一个目录,它会让您执行此操作,然后您可以将其复制回来(如果您对其文件夹具有写入权限)。我认为这与权限有关。有趣的是,每当我调用 powershell 命令时,无论它来自何处,我都可以在屏幕上看到输出(在加载页面时,提示符可见一秒钟我们两个),但它不会进入文件。跨度>

标签: file powershell redirect stdout administrator


【解决方案1】:

我勤奋的父亲解决了这个问题,不使用重定向操作符,而是将输出传递到 Powershell 自己的out-fileexport-csv,这样命令就变成了powershell Get-VM | export-csv out.csv。然后我在 PHP 中解析它并将其转换为表格。像魅力一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多