Invoke-SQLCmd具有不同的凭据

Aar*_*ann 6 sql-server powershell

背景:我在本地运行一个必须以SYSTEM身份运行的脚本,让我们不了解为什么会这样.:)该脚本尝试使用简单查询检查我的MSSQL集群的运行状况.然而,我遇到的问题是本地SYSTEM帐户无权访问远程数据库.在这一点上,我已经尝试了很多东西,我将在稍后介绍,但我老实说,任何有意义的解决方案.如果这意味着在数据库中创建一个本地帐户,可以回答我的简单查询.

到目前为止我有:

$Server = 'myserver.domain.tld'
$Database = 'myDatabase'
$Query = 'SELECT DB_NAME() AS DataBaseName'
$Username = 'myDomain\myUsername'
$Password = 'myPasswordWithPlainText'
Invoke-SQLCmd -ServerInstance $Server -Database $Database -ConnectionTimeout 300 -QueryTimeout 600 -Query $Query -Username $Username -Password $Password
Run Code Online (Sandbox Code Playgroud)

结果: Invoke-Sqlcmd : Login failed for user 'myDomain\myUsername'

也许Invoke-SQL没有采用我认为的Windows身份验证,但它不使用-Credential.所以我尝试使用Invoke-Command作为包装器.

$Server = 'myserver.domain.tld'
$Database = 'myDatabase'
$Query = 'SELECT DB_NAME() AS DataBaseName'
$Username = 'myDomain\myUsername'
$Password = 'myPasswordWithPlainText'
$secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd)
Invoke-Command -script {Invoke-SQLCmd -ServerInstance $Server -Database $Database -ConnectionTimeout 300 -QueryTimeout 600 -Query $Query} -Credential $Credential
Run Code Online (Sandbox Code Playgroud)

这让我: Invoke-Command : Parameter set cannot be resolved using the specified named parameters.

所以......我被困住了.有什么想法吗?

Aar*_*and 7

我使用Get-Credential然后使用Invoke-Command -AsJob从.sql文件运行脚本.例如

$s = 'myserver.domain.tld';
$scriptpath = 'C:\myfile.sql';
$cred = Get-Credential -credential domain\user;
$sess = New-PSSession -ComputerName $s -Credential $cred -Authentication CredSSP -Name 'S1';
$job1 = Invoke-Command -Session $sess -FilePath $scriptpath -AsJob -JobName 'J1';
  # -ArgumentList $args;

Get-Job | Wait-Job;
Get-Job -Name 'J1';

Get-PSSession | Remove-Session;
Get-Job | Remove-Job;
Run Code Online (Sandbox Code Playgroud)

但请注意,$ cred行将启动确认/验证凭证的提示 - 我在脚本中也有数据库名称,因此我不确定如何更改此逻辑以将脚本定向到任何数据库(如果它需要每个服务器自定义).


Aar*_*ann 0

遗憾的是,我尝试了所有这些(包括马特的建议),然后尝试了一些,但我无法让它在以下参数下工作。1) 该脚本是从以 SYSTEM 帐户运行的服务启动的。2) 系统与 SQL 集群位于不同的域/子网/等中。3) 查询必须实时运行并实时返回,因为查询只是较大脚本的一部分。

现在我已经认输了,创建了一个本地 SQL 登录来使用,然后按原样使用 Invoke-SQL 以及 -username 和 -password 选项。这不是我想要处理这种情况的方式,但事实就是如此。谢谢你们!