使用PowerShell在IIS中设置变量

时间:2018-06-14 13:47:59

标签: powershell iis

尝试自动配置网站,需要为netcore应用程序设置一些环境变量。

我准备了以下脚本:

$env:sitename="MyApp"

$env:IMAGEDIRECTORYPATH="C:\Temp\Images\"
$env:REDISINSTANCENAME="DEV"
$env:CACHESERVERHOSTIP="192.168.0.1"
$env:QUEUEMACHINENAME="BOG11"
$env:QUEUESALGORITHMSQUEUE="BOG11\private$\Algorithms"

Import-Module WebAdministration

$envVariables = (
     @{name='SignalRHub';value="$env:IMAGEDIRECTORYPATH"},
     @{name='ApiServerUrl';value="$env:QUEUESALGORITHMSQUEUE"} 
)

$envVariables2 = (
     @{name='SignalRHub3';value="$env:IMAGEDIRECTORYPATH"},
     @{name='ApiServerUrl3';value="$env:QUEUESALGORITHMSQUEUE"} 
)

set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST/$env:SiteName"  -filter "system.webServer/aspNetCore/environmentVariables" -name "." -value $envVariables
set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST/$env:SiteName"  -filter "system.webServer/aspNetCore/environmentVariables" -name "." -value $envVariables2

我在服务器A中运行了脚本,它运行正常。

然后我在服务器B中运行了脚本,我得到了这个:

set-WebConfigurationProperty : The request is not supported. (Exception from HRESULT: 0x80070032)
At line:23 char:1
+ set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST/$env:Si ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-WebConfigurationProperty], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand

set-WebConfigurationProperty : The request is not supported. (Exception from HRESULT: 0x80070032)
At line:24 char:1
+ set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST/$env:Si ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-WebConfigurationProperty], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand

服务器B是从服务器B克隆的。

什么可能导致这种行为?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此命令:

Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location $env:sitename -filter "system.webServer/aspNetCore/environmentVariables" -name "." -value $envVars

答案 1 :(得分:0)

我遇到了同样的问题。在开发服务器上工作,得到了质量检查服务器上原始张贴者所描述的错误。一个是另一个的克隆。问题是要测试QA服务器,我首先在IIS中手动设置了站点,然后通过IIS中的配置编辑器手动输入了环境变量。按照说明运行脚本失败,然后失败。但是,当我清除现有的手动输入的配置以使环境变量为零时,使用Set-WebConfigurationProperty设置环境变量的脚本将起作用。我不必使用-Location参数。

更新:发言太早。原来在MACHINE / WEBROOT / APPHOST级别设置了相同的变量。在站点级别清除它们时,脚本可以工作,但是此后在后续部署中进行更新时,脚本再次中断。对我来说,答案是如果在站点级别更新或在APPHOST级别而不是站点级别更新,则在APPHOST级别删除重复的环境变量。当然,将变量放在APPHOST级别将为所有站点设置该变量。希望这会有所帮助。