web-dev-qa-db-ja.com

非インタラクティブモードのPowershell

デプロイメントにはOctopusを使用しています。展開を制御するPowershellスクリプトの1つに問題があります。

# 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 2.0では動作しないPowershell 3.0で動作します。古いサーバーはWindows Server 2003で実行されているため、Powershell 3.0にアップグレードできません。PS2.0で動作させるにはどうすればよいですか?

20
tobre

-Forceで実行:

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

C.B.がコメントで提案したように:-confirm:$falseも機能するはずです。これの根拠は次のとおりです。-Confirmはスイッチパラメータです。末尾のコロンと値でパラメーターを指定した場合にのみ、スイッチパラメーターは引数を取ることができます。

19
Davor Josipovic

子のあるディレクトリでRemove-Itemを使用しようとしたところ、同じメッセージが表示されました:Remove-Item : PowerShell is in NonInteractive mode. Read and Prompt functionality is not available. 私の場合 -Recurseキーが役立ちました。

0
gek