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