在PowerShell中提取SQL Server服务信息,转义$ sign powershell

时间:2015-12-14 15:43:18

标签: sql-server powershell

如何转义传递给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
            }
        }
}

1 个答案:

答案 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}

enter image description here