Is there a way to supress any interactive prompts in a PowerShell script?

The solution proposed by Eris effectively starts another PowerShell instance. An alternative way to do this, with simpler syntax, is to shell out to another instance of powershell.exe.

powershell.exe -NonInteractive -Command "Remove-Item 'D:\Temp\t'"

See Get-Help about_Preference_Variables:

$ConfirmPreference
------------------
    Determines whether Windows PowerShell automatically prompts you for
    confirmation before running a cmdlet or function.

...

None:    Windows PowerShell does not prompt automatically.
                         To request confirmation of a particular command, use
                         the Confirm parameter of the cmdlet or function.

So:

> $ConfirmPreference = 'None'

Ok, This is really ugly, but holy mustard stains it "works".

Issues:

  • I have not figured out how to continue after the first error
  • In this case, it removes plain files, then stops at the first folder
  • I have not figured out how to make this cmdlet work if I add the UseTransaction parameter
  • This will only work for the Simple case (commands that don't do a lot of stuff with the current environment). I have not tested anything complex

    $MyPS = [Powershell]::Create()
    $MyPS.Commands.AddCommand("Remove-Item")
    $MyPS.Commands.AddParameter("Path", "D:\Temp\t")
    $MyPS.Invoke()

Output:

Commands                                                                                                                 
--------                                                                                                                 
{Remove-Item}                                                                                                            
{Remove-Item}                                                                                                            
Exception calling "Invoke" with "0" argument(s): "A command that prompts the user failed because the host program or the 
command type does not support user interaction. The host was attempting to request confirmation with the following 
message: The item at D:\Temp\t has children and the Recurse parameter was not specified. If you continue, all children 
will be removed with the item. Are you sure you want to continue?"
At line:19 char:1
+ $MyPS.Invoke()
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : CmdletInvocationException

Tags:

Powershell