如何转义传递给get-service的变量?我正在传递$ _。名称,此名称将包含$(美元)符号,导致其失败。
我如何告诉powershell不考虑该变量的$ inside并将其传递给get-service并仍然有效?
foreach($machine in $machines) {
Write-Output "$machine ACTIVE NOW: "
Write-Output "---------------------------------"
Get-Service -name "*sql*" -computername $machine -ErrorAction SilentlyContinue |
Sort-Object -Property DisplayName |
foreach{
$k = $machine + " - " + $_.DisplayName
$v = $_Status
$serviceStatus[$k] = $v
Get-Service `$_.Name | Select-Object -ExpandProperty ServicesDependedOn |
foreach{
$kd = $k + "has a dependency on " + $_.DisplayName
$s = $_.Status
$serviceStatus[$kd] = $s
}
}
}
答案 0 :(得分:4)
使用脚本时,您不应该逃避任何事情,如果您使用$_.Name
删除后退,它应该有效。
当您使用脚本中的方法传递属性时,PowerShell足够聪明,可以接受带有特殊字符的值作为文字值。如果用双引号"$_.Name"
包装它,那么SQL Server将尝试计算表达式并仅传递实例服务名称的MSSQL
。
此命令在我的机器上运行时没有任何错误:
Get-Service -name "*SQL*" -ErrorAction SilentlyContinue |
sort-object -Property DisplayName |
foreach { Get-Service $_.Name | select -ExpandProperty ServicesDependedOn}