我正在尝试使用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实例的管理员权限。
答案 0 :(得分:0)
我会定期进行SQL无人值守安装,并且SQL Server安装程序会将创建的每个实例的TCP设置默认设置为1433。因此,除非出于任何原因将其更改为其他端口号,否则都无需手动执行此操作。
我了解到这无论在这里还是那里以及您的目标是什么,但是作为对我的一个实验室中的一台SQL服务器的快速检查,这似乎就是事实。
您当然可以设置凭证文件...
...或Windows凭据管理器...
...在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)