首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell Invoke-Sqlcmd登录失败

Powershell Invoke-Sqlcmd登录失败
EN

Stack Overflow用户
提问于 2014-03-12 04:13:20
回答 1查看 7.4K关注 0票数 3

我正在尝试从powershell for Windows sql Server2008 R2运行SQL查询。代码似乎无法传递SQL Server身份验证凭据以正确运行sqlcmd。我直接从powershell运行这第一部分,而不是作为脚本。

代码语言:javascript
复制
Set-Location SQLServer:\SQL\Server\
Invoke-sqlcmd "SELECT DB_NAME() AS hist;" -username "username" -password "p@ss"

I receive error,Login failed for user 'username'.代码格式的理想最终结果如下所示。同样的结果错误。

代码语言:javascript
复制
$path = "sqldbdump.csv"
$server = "serveronlocalhost"
$db = "hist"
$Query = @"
SELECT * From alarms;
"@
Invoke-Sqlcmd -ServerInstance $server -Database $db -Username $username -Password $pw -Query $Query | Export-CSV $path

我也尝试过convert-tosecurestring -asplaintext,但没有成功。

代码语言:javascript
复制
$pw = convertto-securestring -AsPlainText -Force -String "p@ss"
EN

回答 1

Stack Overflow用户

发布于 2016-08-25 19:37:28

永远不要对包含密码的变量使用双引号,因为会解释特殊字符(对于包含特殊字符的用户名也是如此)。单引号字符串的情况并非如此。

例如,此密码将导致身份验证错误,因为将计算字符$:

代码语言:javascript
复制
$pw = "p@ss$ord!"

但是如果你使用单引号,它将会起作用:

代码语言:javascript
复制
$pw = 'p@ss$ord!'

请注意,同样的原则也适用于命令行,所以这将不起作用:

代码语言:javascript
复制
Invoke-Sqlcmd ... -Password "p@ss$ord!"

你应该这样写:

代码语言:javascript
复制
Invoke-Sqlcmd ... -Password 'p@ss$ord!'
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22335651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档