Есть несколько способов сделать это.
Простой способ
dbatools
Существует модуль PowerShell для взаимодействия с SQL Server, созданный сообществом SQL Server.называется dbatools.В модуле есть функция с именем Invoke-DbaQuery
, которая по сути является оберткой для Invoke-Sqlcmd
.
Эта функция имеет параметр -ReadOnly
, который можно использовать, который был создан именно для этого сценария.
# Changing your $auth to a PSCredential object.
$cred = [System.Management.Automation.PSCredential]::New(
$SqlUserName,
(ConvertTo-SecureString -String $SqlAdminPassword -AsPlainText -Force))
# Splatting the parameters for read-ability.
$QueryParams = @{
Query = $SQLQuery
SqlInstance = $SQLServerName
Database = 'SShared'
QueryTimeout = 0
SqlCredential = $cred
ReadOnly = $true # <-- Specifying read-only intent.
ErrorAction = 'Stop'
}
$allTenants = Invoke-DbaQuery @QueryParams
Другой способ
Invoke-Sqlcmd
Если вы не можете, не хотите, не хотите использовать dbatools, вы все равно можете использовать Invoke-Sqlcmd
.Последний выпуск на момент написания имеет возможность указать параметр -ConnectionString
.
Вы можете указать, что он доступен только для чтения.
# Splatting again for read-ability.
$SqlcmdParams = @{
Query = $SQLQuery
QueryTimeout = 0
ConnectionString = "Data Source=$SQLServerName;Initial Catalog=SShared;User ID=$SqlUserName;Password=$SqlAdminPassword;Integrated Security=false;ApplicationIntent=ReadOnly" # <-- Specifying read-only intent.
ErrorAction = 'Stop'
}
Invoke-Sqlcmd @SqlcmdParams