PowerShell版本与变量的差异

时间:2014-08-11 20:24:59

标签: variables powershell msdeploy

我在Windows Server 2008中运行一个脚本,该脚本具有从IIS收集AppPool名称的PowerShell V2,然后删除所有这些名称,然后删除这些网站的所有网站和内容。没有任何问题。工作得很漂亮。现在,在Windows Server 2012上使用PowerShell V4在相同的池和网站上运行相同的脚本,并且由于AppPools名称中的空格而不会删除所有内容。为什么这只是PS V4中的一个问题。

这就是它的样子

此外,在v4中我是否双引号$ site变量并不重要,因为它仍会引发相同的错误。再次,这在v2中很好,它运行速度更快。 2008服务器上完全相同的池,站点和内容可以在大约20秒内被删除,而在2012年它需要几分钟然后抛出这样的错误并跳过一些东西。

....
$msdeploy=Get-Command 'C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe'

foreach ($site in $list.WebAppName) {
    write-host $site
    & $msdeploy -verb:delete -dest:appPoolConfig=$site –skip:objectname=rootwebconfig32 –skip:objectname=httpCert –skip:objectname=machineconfig32 
}

输出就是一个例子

2.0 DefaultAppPool

msdeploy.exe : Error: Unrecognized argument '"-dest:"appPoolConfig=2.0'. All arguments must begin with "-".
At line:19 char:5
+     & $msdeploy -verb:delete -dest:appPoolConfig=$site –skip:objectname=rootwe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (Error: Unrecogn...begin with "-".:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

Error count: 1.

2 个答案:

答案 0 :(得分:0)

你这样做错了。来自Web Deploy Command Line Syntax的MSDN文档摘录

  

通过对其通常语法的微小修改,Web Deploy命令可以   从Windows PowerShell提示符运行。为此,请更改冒号   Web的动词,源和dest参数之后的字符(:)   将命令部署到等号(=)。在以下示例中,比较   带有PowerShell版本的Web Deploy命令。

     

Web Deploy命令:msdeploy -verb:sync -source:metakey = / lm / w3svc / 1   -dest:metakey = / lm / w3svc / 2 -verbose

     

PowerShell命令:。\ msdeploy.exe -verb = sync   -source = metakey = / lm / w3svc / 1 -dest = metakey = / lm / w3svc / 2 -verbose

您的命令语法应为

$msdeploy -verb=delete -dest=appPoolConfig=$site.trim() –skip=objectname=rootwebconfig32
–skip=objectname=httpCert –skip=objectname=machineconfig32

答案 1 :(得分:0)

我会尝试将你的param值封装在引号和括号中的语句中,如下所示:

& { $msdeploy -verb=delete -dest=appPoolConfig="$site" –skip=objectname=rootwebconfig32 –skip=objectname=httpCert –skip=objectname=machineconfig32 }