如何使用当前用户的凭据运行Set-SqlNetworkConfiguration

时间:2018-09-02 20:36:09

标签: sql-server powershell

我正在尝试使用Set-SqlNetworkConfiguration设置SQL Server实例的TCP端口。该命令如下所示:

Set-SqlNetworkConfiguration -Protocol TCP -Port 1433 -ServerInstance $ENV:ComputerName\SQLSERVER

但是,该命令使用GUI提示符提示输入凭据。有-Credential参数,但是我发现的示例使用Get-Credential,它再次显示UI提示。

如何使用当前用户的凭据而没有运行Set-SqlNetworkConfiguration,而不显示任何GUI提示,而无需在脚本中对凭据进行硬编码?我绝对不需要显式设置用户名和密码。当前用户具有给定SQL Server实例的管理员权限。

2 个答案:

答案 0 :(得分:0)

我会定期进行SQL无人值守安装,并且SQL Server安装程序会将创建的每个实例的TCP设置默认设置为1433。因此,除非出于任何原因将其更改为其他端口号,否则都无需手动执行此操作。

我了解到这无论在这里还是那里以及您的目标是什么,但是作为对我的一个实验室中的一台SQL服务器的快速检查,这似乎就是事实。

您当然可以设置凭证文件...

  

https://www.jaapbrasser.com/quickly并安全存储您的凭证-powershell

...或Windows凭据管理器...

  

从PowerShell访问Windows Credential Manager

...在SQL安装部分之前,然后从那里调用凭据。我知道,不是您追求的那样,但是根据我不久前的所有测试,这似乎是唯一的选择,而不仅仅是此cmdlet。整个cmdlet都会发生这种情况。

例如...

  Get-SqlInstance -MachineName $ ENV:ComputerName
 

…也会提示,除非您通过XML文件或Windows凭据管理器从存储位置传递凭据,这是我在本地和在线安装和PSRemoting会话中使用的凭据。但是,您必须至少得到一次提示。

答案 1 :(得分:0)

我已经为此类情况设置了设置凭据对象的功能。

function Set-Credentials 
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $true,ValueFromPipeline = $true,Position = 0)][ValidateNotNull()][String]$UserName,
        [Parameter(Mandatory = $false,ValueFromPipeline = $true,Position = 1)][ValidateNotNull()][String]$UserPassword
    )
    if (-not$UserPassword)
    {
        $Password = Read-Host -Prompt "Specify password for $UserName" -AsSecureString
    }
    else
    {
        $Password = (ConvertTo-SecureString -String $UserPassword -AsPlainText -Force)
    }
    $Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList @($UserName, $Password)
    Write-Output -InputObject $Credentials
}

用法示例:

Set-SqlNetworkConfiguration -Protocol TCP -Port 1433 -ServerInstance $ENV:ComputerName\SQLSERVER -Credentials $(Set-Credentials -UserName UserName -UserPassword UserPassword)