Powershell,使用msdeploy启动或停止iis站点

Powershell,使用msdeploy启动或停止iis站点,powershell,msdeploy,iis-8.5,Powershell,Msdeploy,Iis 8.5,我正在尝试将批处理脚本迁移到powershell 我已尝试编写脚本并从powershell ise运行它 $sites = @("abc","xyz","pqr") foreach ($site in $sites) { msdeploy -verb:sync -verbose -source:runcommand -dest:runcommand="$env:windir\system32\inetsrv\appcmd stop site /site.name":$site } 当我

我正在尝试将批处理脚本迁移到powershell

我已尝试编写脚本并从powershell ise运行它

$sites = @("abc","xyz","pqr")
foreach ($site in $sites)
{
    msdeploy -verb:sync -verbose -source:runcommand -dest:runcommand="$env:windir\system32\inetsrv\appcmd stop site /site.name":$site
}
当我运行命令(msdeploy)时,它会在命令提示符下完美地运行

我收到以下错误(附件):


如果有人能在这方面帮助我,我将不胜感激。提前感谢。

您需要使用
调用表达式
,这将允许您将字符串作为命令执行。将命令存储为字符串,并将其作为参数传递给
Invoke Expression

$sites = @("abc","xyz","pqr")
$commandPrefix = 'msdeploy -verb:sync -verbose -source:runcommand -dest:runcommand="$env:windir\system32\inetsrv\appcmd stop site /site.name"'
foreach ($site in $sites)
{
    $command = $commandPrefix ":" $site
    Invoke-Expression $command
} 

经过这么多的斗争,我终于明白了,并解决了这个问题

foreach($site in $sites){
msdeploy -verb:sync -verbose -source:runcommand -dest:runcommand=`"$env:windir\system32\inetsrv\appcmd stop site /site.name`":"$site",computername="$serverName",username="$user",password="$passCode"
}
它只是一个转义字符,帮助我运行脚本(“`”)


我希望它能帮助一些人,而不是拉扯他们的头发

您也可以尝试使用recycleApp提供程序:

msdeploy -verb:sync -source:recycleApp -dest:recycleApp="MySite",recycleMode="StopAppPool"
//deploy and sync content
msdeploy -verb:sync -source:recycleApp -dest:recycleApp="MySite",recycleMode="StartAppPool"

谢谢你的回复。我在下面发布了我的解决方案。是的,我在使用转义字符后能够运行该命令。感谢Alan让我知道如何使用msdeploy的recycleApp。如何再次启动IIS?