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

问题描述 投票:0回答:2

我正在尝试使用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实例的管理员权限。

sql-server powershell
2个回答
0
投票

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

我在这里或那里都没有这个以及你的目标是什么,但作为对我的一个实验室中的一个SQL服务器的快速健全性检查,这似乎就是它。

当然你可以设置凭据文件......

https://www.jaapbrasser.com/quickly-and-securely-storing-your-credentials-powershell

...或Windows Credential Manager ...

Accessing Windows Credential Manager from PowerShell

...在SQL安装部分之前,从那里调用信任。我知道,不是你所追求的,但这似乎是基于我不久前所有测试的唯一选择,它不仅仅是这个cmdlet。这在整个cmdlet中发生。

例如 …

Get-SqlInstance -MachineName $ENV:ComputerName

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


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)
© www.soinside.com 2019 - 2024. All rights reserved.