我正在尝试使用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无人值守安装,SQL Server安装程序为每个创建的实例设置TCP设置默认值为1433。因此,除非您因任何原因将其更改为其他端口号,否则不应手动执行此操作。
我在这里或那里都没有这个以及你的目标是什么,但作为对我的一个实验室中的一个SQL服务器的快速健全性检查,这似乎就是它。
当然你可以设置凭据文件......
https://www.jaapbrasser.com/quickly-and-securely-storing-your-credentials-powershell
...或Windows Credential Manager ...
...在SQL安装部分之前,从那里调用信任。我知道,不是你所追求的,但这似乎是基于我不久前所有测试的唯一选择,它不仅仅是这个cmdlet。这在整个cmdlet中发生。
例如 …
Get-SqlInstance -MachineName $ENV:ComputerName
...也会提示,除非您通过XML文件或Windows凭据管理器从存储位置传递信用,这是我在我的安装和PSRemoting会话中使用的本地和在线。但是,你必须至少得到一次提示。
我已经为这种情况设置了一个功能来设置凭证对象。
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)