मैं SQL इंस्टेंस नाम प्राप्त करने के लिए नीचे दी गई स्क्रिप्ट का उपयोग कर रहा हूं और फिर उससे संबंधित कुछ कार्य करता हूं। मैं इसे काम करने में असमर्थ हूं क्या आप मुझे यह पता लगाने में मदद कर सकते हैं कि इस मुद्दे को कैसे ठीक किया जाए?

    $SQLInstances = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances
    foreach ($sql in $SQLInstances) {
       [PSCustomObject]@{
           InstanceName = $sql
       }
   }

Write-Host "The following SQL Instances were detected on the server $env:Computername $SQLInstances" -ForegroundColor Yellow

If ($SQLInstances -ne "MSSQLSERVER")
    {Write-Host $($env:Computername)\$($SQLInstances)
$serverName =  $($env:Computername)\$($SQLInstances)}

    Else {Write-Host "Standard SQL Instance was found, proceeding with the script."
$ServerName = $env:Computername}

तो उपरोक्त कोड काम नहीं करता है, लिखें-होस्ट प्रदर्शित करता है "कंप्यूटर नाम (स्पेस) \ इंस्टेंसनाम" इसलिए वहां एक अतिरिक्त जगह है जिसे मैं छुटकारा पाना चाहता हूं, साथ ही $serverName = $($env:Computername)\$($SQLInstances)} "अनपेक्षित टोकन/अभिव्यक्ति" फेंकता है

मैं इसे कैसे ठीक करूं?

0
Aasim Shakil Pathan 28 मार्च 2020, 10:44
आपको बस अपने मूल्यों के आसपास उद्धरण जोड़ने की जरूरत है। "$($env:Computername)\$($SQLInstances)"
 – 
AdminOfThings
28 मार्च 2020, 16:03

2 जवाब

सबसे बढ़िया उत्तर

आप इस समस्या को लिखें-होस्ट करें क्योंकि पार्सर टोकन की व्याख्या कर रहा है। () या $() (जब तक () या $() एक स्ट्रिंग का हिस्सा नहीं है) को एक्सप्रेशन मोड में एक तर्क के रूप में माना जाएगा। चूंकि Write-Host के लिए डिफ़ॉल्ट विभाजक एक स्थान है, इसलिए आपको अपने प्रत्येक संसाधित तर्क के बीच अतिरिक्त स्थान मिलता है। यदि आप अपने संपूर्ण मान को दोहरे उद्धरण चिह्नों से घेरते हैं, तो इसे एकल टोकन के रूप में पार्स किया जाएगा।

Write-Host "$($env:Computername)\$SQLInstances"

$serverName असाइनमेंट के संबंध में, यह भी एक पार्सिंग मुद्दा है। एक चर को निर्दिष्ट करते समय, पार्सर अभिव्यक्ति मोड में होता है। इसलिए, मान एक मान्य व्यंजक होना चाहिए। \ वर्ण ही त्रुटि उत्पन्न करता है। डबल कोट्स भी यहां पर्याप्त होंगे।

$serverName =  "$($env:Computername)\$SQLInstances"
0
AdminOfThings 28 मार्च 2020, 16:50

मॉड्यूल sqlserver से Get-SqlInstance cmdlet आज़माएं:

Import-Module sqlserver
If (Get-SQLInstance -ServerInstance "MSSQLSERVER"){
  # Instance found
} 
Else {
  # Instance not found

0
Wasif 28 मार्च 2020, 11:33