非交互模式下的Powershell

34

我使用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
    }
}

我试图停止的程序不是以上脚本中所看到的那些,但它们代表了我想要做的事情。现在我的问题是,在一个服务器上它能正常运行,但在另一个服务器上却不能。在无法运行的服务器上,我会收到以下错误信息:

Stop-Process : Windows PowerShell处于非交互模式。读取和提示功能不可用。

那个能正常运行的脚本在Powershell 3.0上运行,而不能正常运行的脚本在Powershell 2.0上运行。由于旧服务器使用Windows Server 2003,我无法立即升级到Powershell 3.0。有什么办法可以让它在PS 2.0上工作?


你能否在版本为2.0的服务器上发布get-executionpolicy$confirpreference的值? - CB.
抱歉,我的笔误:$confirmpreference... - CB.
$confirmpreference高 - tobre
2
尝试在 stop-process 命令中添加“-confirm:$false”。 - CB.
2
今天我尝试了一下。Stop-Process 没有任何问题。它可以使用 -Force,也可以使用 -confirm:$false,两者一起也可以。谢谢! - tobre
显示剩余2条评论
2个回答

37

使用 -Force 参数运行:

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

如 C.B. 在评论中建议的那样:使用 -confirm:$false 也可以达到同样的效果。这样做的原因是: -Confirm 是一个开关参数,只有在指定带冒号和值的参数时才能接受参数。


我会尽快尝试这个。我们的用户经常使用系统进行测试,我不能经常进行部署。今天早上我从PowerShell ISE运行了脚本,停止了记事本,它运行得很好。因此,检查问题是否已解决的唯一方法是进行实际部署。 - tobre
1
更正。使用“-Force”运行。 - Andrew Young
我在一个DevOps部署powershell脚本中使用了Remove-Item和-Force,但仍然收到此消息。因此,我将尝试使用-confirm:$false开关。 - Ian Yates

4

我刚试图使用Remove-Item删除带有子目录的目录,得到了同样的消息:

Remove-Item: PowerShell处于非交互模式。读取和提示功能不可用。

在我的情况下,-Recurse参数有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接