【问题标题】:Powershell in NonInteractive mode非交互模式下的 Powershell
【发布时间】:2023-04-05 06:38:02
【问题描述】:

我使用 Octopus 进行部署。我对控制部署的 Powershell 脚本之一有疑问:

# stops running processes
$processes = @("Notepad",
               "Firefox")
foreach ($process in $processes)
{
    $prc = Get-Process -Name $process -ErrorAction SilentlyContinue
    if (-not($prc -eq $null))
    {
        Write-Host "Stopping " $prc.ProcessName
        Stop-Process -InputObject $prc -ErrorAction SilentlyContinue
    }
}

我尝试停止的程序不是您在上面的脚本中看到的程序,但它们代表了我正在尝试做的事情。现在我遇到的问题是它在一台服务器上运行良好,但在另一台服务器上运行良好。在它不起作用的地方,我收到错误消息:

停止进程:Windows PowerShell 处于非交互模式。阅读和提示功能不可用。

可以在 Powershell 3.0 上运行的脚本在 Powershell 2.0 上不可以运行。我还不能在任何地方升级到 Powershell 3.0,因为旧服务器运行的是 Windows Server 2003。我怎样才能让它在 PS 2.0 上运行?

【问题讨论】:

  • 你能把get-executionpolicy$confirpreference的值从2.0版本的服务器上贴出来吗?
  • get-executionpolicy RemoteSigned $confirpreference $confirpreference 没有输出。
  • 操作,我的错字:$confirmpreference ...
  • 尝试将-confirm:$false 添加到停止进程cmdlet..
  • 我今天可以试一试。停止过程没有问题。它适用于 -Force,它适用于 -confirm:$false 以及两者一起使用。谢谢!

标签: powershell deployment octopus-deploy


【解决方案1】:

我只是尝试在有孩子的目录上使用 Remove-Item 并得到相同的消息: Remove-Item : PowerShell is in NonInteractive mode. Read and Prompt functionality is not available. 就我而言,-Recurse 键有所帮助。

【讨论】:

    【解决方案2】:

    使用-Force 运行:

    Stop-Process -InputObject $prc -ErrorAction SilentlyContinue -Force

    正如 C.B. 在评论中建议的那样:-confirm:$false 也应该可以工作。这样做的理由如下:-Confirm 是一个开关参数。切换参数只有在指定参数后带有冒号和值时才能接受参数。

    【讨论】:

    • 我会尽快尝试一下。我们的用户经常使用该系统进行测试,而我不能经常进行部署。我今天早上从 Powershell ISE 停止记事本运行脚本,它运行良好。因此,检查问题是否已解决的唯一方法是进行实际部署。
    • 更正。使用-Force 运行
    • 我在 DevOps 部署 powershell 脚本中使用了带有 -Force 的 Remove-Item,但仍然收到此消息。所以我也要试试 -confirm:$false 开关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2019-08-31
    • 2017-06-05
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多