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

时间:2018-04-04 15:59:49

标签: 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
}

当我运行命令(msdeploy)时,它从命令提示符运行完美。

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

Error capture

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

3 个答案:

答案 0 :(得分:1)

经过这么多的斗争,我想出来了,并解决了这个问题。

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"
}

这只是一个帮助我运行脚本(“”“)的转义字符。

我希望它可以帮助别人不拉头发。

答案 1 :(得分:1)

您也可以尝试使用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"

答案 2 :(得分:0)

您需要使用Invoke-Expression,这将允许您将字符串作为命令执行。将您的命令存储为字符串,并将其作为参数传递给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
}