我必须向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%
发布于 2019-01-18 00:16:49
.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当有疑问的时候,把它表达出来。
再看一眼
我认为可能是%的百分比符号引起了你的悲痛。这是PowerShell中ForEach-Object命令的简写形式。试着这样做:
Invoke-expression "$appcmd --% set config -section:system.applicationHost/applicationPools /+`"`"[name='$($Task.eProto_Pool)'].environmentVariables.[name='PRODUCT_NAME',value='eProto']`"`" /commit:apphost`""这应该会像您需要的那样转义字符串,并传入参数,就像$Task的eProto_Pool属性一样。
https://stackoverflow.com/questions/54239460
复制相似问题