【发布时间】:2019-01-08 09:12:50
【问题描述】:
我从未见过如此简单的脚本如此失败:
$SQLServer = "localhost"
$cred = Get-Credential
invoke-sqlcmd -ServerInstance $SQLServer -Credential $cred -Query "select @@version"
这句话说-Credentials 无法识别:
Invoke-Sqlcmd : A parameter cannot be found that matches parameter name 'Credential'.
那么拥有Get-Credential 有什么意义呢?
我在网上看到很多例子,都是这样用的。
编辑示例:为什么这段代码可以使用-Credential?因为-Credential 在函数内部?
function Pause ($Message="Press any key to continue..."){
""
Write-Host $Message
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
function GetCompName{
$SQLServer = Read-Host "Please enter a computer name or IP"
CheckHost
}
function CheckHost{
$ping = gwmi Win32_PingStatus -filter "Address='$SQLServer'"
if($ping.StatusCode -eq 0){$pcip=$ping.ProtocolAddress; GetCollation}
else{Pause "Host $SQLServer down...Press any key to continue"; GetCompName}
}
function GetCollation {
#Provide Database Name
$DatabaseName ="master"
#Prompt for user credentials
$credential = Get-Credential
$Query = "SELECT name, collation_name FROM sys.databases; "
invoke-sqlcmd -ServerInstance $SQLServer -Database $DatabaseName -Credential $credential -Query $Query | Format-Table
}
#---------Start Main--------------
$SQLServer = $args[0]
if($SQLServer){CheckHost}
else{GetCompName}
【问题讨论】:
-
有一个用户名和凭据参数。如果你看这篇文章,这就是他们过去常做的事情:stackoverflow.com/questions/7154122/…
-
这看起来很奇怪。如果您手动运行代码而不是调用脚本,那么它可以工作吗?当您运行 Get-Credential 时,您应该被提示输入新凭证对象的用户名和密码,您是否都被提示输入?
-
@HenrikStanleyMortensen,如果
invoke-sqlcmd和Get-Credential在函数内,我会收到提示。这很有趣,但在功能之外它们不会被执行。还有更搞笑的-Credentials好像认不出来了
标签: sql-server powershell invoke-sqlcmd