Powershell get SQL экземпляр - PullRequest
0 голосов
/ 28 марта 2020

Я использую приведенный ниже скрипт, чтобы получить имя экземпляра 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}

Так что приведенный выше код не работает, Write-Host отображает "ComputerName (SPACE) \ InstanceName", так что там есть дополнительное место, от которого я хочу избавиться, плюс $serverName = $($env:Computername)\$($SQLInstances)} выбрасывает "неожиданный токен / выражение

Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Вы видите эту проблему с Write-Host из-за того, как parser интерпретирует токены. () или $() (если () или $() не является частью строки) будет рассматриваться как один аргумент в режиме выражения. Поскольку разделителем по умолчанию для Write-Host является пробел, вы получаете дополнительный пробел между каждым из ваших обработанных аргументов. Если вы заключите все значение в двойные кавычки, оно будет проанализировано как один токен.

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

Что касается присвоения $serverName, это также проблема синтаксического анализа. При назначении переменной анализатор находится в режиме выражения. Следовательно, значение должно быть допустимым выражением. Символ \ - это то, что выдает ошибку. Здесь также будет достаточно двойных кавычек.

$serverName =  "$($env:Computername)\$SQLInstances"
0 голосов
/ 28 марта 2020

Попробуйте командлет Get-SqlInstance из модуля sqlserver:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...