デプロイメントには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で動作させるにはどうすればよいですか?
-Force
で実行:
Stop-Process -InputObject $prc -ErrorAction SilentlyContinue -Force
C.B.がコメントで提案したように:-confirm:$false
も機能するはずです。これの根拠は次のとおりです。-Confirm
はスイッチパラメータです。末尾のコロンと値でパラメーターを指定した場合にのみ、スイッチパラメーターは引数を取ることができます。
子のあるディレクトリでRemove-Itemを使用しようとしたところ、同じメッセージが表示されました:Remove-Item : PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.
私の場合 -Recurse
キーが役立ちました。