2015-12-14 38 views
2

如何轉義傳遞給get-service的變量?我正在傳遞$ _。NAME,並且這個名稱將包含$(美元)符號,導致它失敗。

如何告訴powershell不考慮該變量的$內部並將其傳遞給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

您是否嘗試過使用轉義字符 '\'?另外,不知道這與數據庫有什麼關係......? –

+0

只爲那些試圖關閉這個問題,它實際上不屬於SO。如果有什麼問題可以轉移到SF上,但是DBA.SE還有其他一些關於管理SQL Server服務的問題(無論你只是提取信息還是故障排除)......所以它確實屬於[對此可以提出什麼問題站點(http://dba.stackexchange.com/help/on-topic)。 –

+0

@ ShawnMelton:我不知道這個問題是否是關於SF的話題,但我相信它對於SO來說是完全正確的,並且在很大程度上比DBA.SE.我不相信僅僅因爲PowerShell是一個通用的(而不是特定於數據庫的)腳本環境,而是因爲所討論的問題是通用的而不是數據庫特定的。 –

回答

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