Powershell appcmd.exe пытается выполнить - PullRequest
0 голосов
/ 17 января 2019

Я хочу добавить немного среды в 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 Ответ

0 голосов
/ 17 января 2019

.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.

...