2015-09-18 166 views
0

我试图运行这个命令:PowerShell的变量APPCMD

$appcmd = "C:\windows\system32\inetsrv\appcmd.exe" 
$env = "dev1" 
$IP = "10.10.10.10" 

& $appCMD set config -section:system.applicationHost/sites /+"[name='customapp1$env'].bindings.[protocol='http',bindingInformation='$IP:80:customapp1$env.domain.com']" /commit:apphost 

这里的问题是在APPCMD命令的$ IP的变量。它确实修改了绑定属性,但是当我在IIS管理器中查看它时,它会显示“绑定信息不正确”,并且只显示其他所有字段都为空的HTTP。

如果我真的键入IP地址,例如:

& $appCMD set config -section:system.applicationHost/sites /+"[name='customapp1$env'].bindings.[protocol='http',bindingInformation='10.10.10.10:80:customapp1$env.domain.com']" /commit:apphost 

它只是罚款(包括其他的 “$ ENV” 变量)。我怎样才能让这个$ IP变量正确传递?

我真的很感激它!

+1

尝试使用'$ {IP}'语法代替。 –

+0

你是男人!谢谢 - 这工作。为了我自己的好奇心,为什么这会起作用? –

+1

这是因为以下冒号。 PowerShell使用它来定义范围。使用括号可以解除字符的关联,因此可以自行评估。 – Matt

回答

2

使用${IP}来精确指定变量名称。 :实际上被认为是变量名称的一部分,它将范围或PowerShell驱动器与变量名称分开。因此,Powershell将该变量解释为$ip:80,范围或驱动器为ip,名称为80。由于ip未解析为范围或驱动器,因此值为空。