使用PowerShell停止IIS站点跳过确认框执行无效如何解决
问题原因解析
- 参数转义失效
你使用双引号包裹-ArgumentList的命令内容时,字符串内的$false会被发起调用的父PowerShell环境提前解析替换;如果是从CMD环境执行该命令,$符号会被识别为普通字符,最终传递到新开的管理员PowerShell进程中的参数出现偏差,导致-Confirm:$false和-Force参数未被Stop-IISSite正确识别。 - 缺少显式命令标识
通过Start-Process(别名SAPS)启动PowerShell进程时,需要显式添加-Command参数指定后续内容为要执行的命令,部分版本的PowerShell会默认将后续字符串判定为脚本文件路径,导致命令实际未被执行。 - 进程自动退出掩盖报错
默认情况下新开的PowerShell进程执行完命令后会直接关闭,即使命令执行报错你也无法看到提示,容易误判为无报错未执行。
修复方案
推荐将-ArgumentList改为数组形式规避转义问题,正确写法如下:
SAPS PowerShell -Verb RunAs -ArgumentList @( "-NoExit", "-Command", "Stop-IISSite -Name 'website' -Force -Confirm:`$false" )
其中$false前的反引号用于避免父PowerShell环境提前解析变量,-NoExit参数可让窗口执行完命令后保留,方便排查问题。
如果是在CMD环境中执行,可以直接将$false替换为0(Switch参数识别0为禁用确认),写法如下:
SAPS PowerShell -Verb RunAs -ArgumentList "Stop-IISSite -Name 'website' -Force -Confirm:0"
内容的提问来源于stack exchange,提问作者Yasser Chacon
相关产品推荐
相关产品推荐

