Powershell appcmd.exe пытается выполнить
Я хочу добавить немного среды в appPools? и я попробовал этот код:
$Appcmd = [System.Environment]::SystemDirectory + "\inetsrv\appcmd.exe"
& $appcmd --% set config -section:system.applicationHost/applicationPools /+""[name='$Task.eProto_Pool'].environmentVariables.[name='PRODUCT_NAME',value='eProto']"" /commit:apphost"
но $Task во второй строке не работает, как я могу вставить переменную в эту строку? Я также пробовал%Task%
1 ответ
.eProto_Pool
является собственностью $Task
, Если вы хотите разыменовать (то есть получить одно единственное свойство объекта) внутри строки, вам нужно заключить строку в $()
оператор подвыражения в PowerShell.
Например, я сделаю новую хеш-таблицу с именем $MyString
это имеет два свойства.
$MyString = @{Name = "Stephen";Value="CoolDude"}
>$MyString
Name Value
---- -----
Value CoolDude
Name Stephen
Посмотрите, что произойдет, если я попытаюсь сослаться на него внутри строки с обычным расширением строки. Это в основном то, что вы делали в своем примере выше. Видите, как это не работает так, как вы ожидаете?
write-host " The user $MyString.Name is a $MyString.Value"
The user System.Collections.Hashtable.Name is a System.Collections.Hashtable.Value
Время использовать оператор подвыражения для сохранения дня.
write-host " The user $($MyString.Name) is a $($MyString.Value)"
The user Stephen is a CoolDude
Если есть сомнения, подвыражение это из.
На второй взгляд
Я думаю, что это может быть знак процента %
что вызывает у тебя горе Это сокращение для ForEach-Object
Команда в PowerShell. Попробуйте это вместо:
Invoke-expression "$appcmd --% set config -section:system.applicationHost/applicationPools /+`"`"[name='$($Task.eProto_Pool)'].environmentVariables.[name='PRODUCT_NAME',value='eProto']`"`" /commit:apphost`""
Это должно экранировать строки, как вам нужно, а также передавать параметры, такие как eProto_Pool
собственностью $Task
,