通过PowerShell获取SQL命名实例名称

通过PowerShell获取SQL命名实例名称,sql,powershell,named-instance,Sql,Powershell,Named Instance,我有一个SQL作业,它(除其他外)处理以SQL命名实例命名的文件夹中的一些文件 以下是SQL作业中的相关代码: EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Do Stuff', @step_id=1, 废话废话 @os_run_priority=0, @subsystem=N'PowerShell', @command= $dir = "\\SomeNetworkLocation\" +

我有一个SQL作业,它(除其他外)处理以SQL命名实例命名的文件夹中的一些文件

以下是SQL作业中的相关代码:

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, 
@step_name=N'Do Stuff', 
@step_id=1, 
废话废话

@os_run_priority=0, @subsystem=N'PowerShell', 
@command= $dir = "\\SomeNetworkLocation\" + $env:computername
#do stuff with $dir
因此,这一部分,
$dir=“\\SomeNetworkLocation\”+$env:computername
,获取计算机名并生成我的文件位置的完整路径,这对我的大多数服务器都很有用。我遇到的问题是,我的一些服务器是命名实例,因此拉取服务器名称不够好,因为它只返回命名实例的第一部分。我需要它以某种方式获取
$env:computername+'.'+$MyInstance
。SQL上命名实例的格式为
MyServer\MyInstance
,如果这样有帮助的话


是否有办法通过PowerShell获取此作业所在实例的名称?

如果您使用的是SQL作业,则可以通过使用获取实例名称以及服务器名称来查找服务器实例

作为一个起点,我认为你可以:

@os_run_priority=0, @subsystem=N'PowerShell', 
@command= $dir = "\\SomeNetworkLocation\" + $(ESCAPE_DQUOTE(A-SRV)) + "_" + $(ESCAPE_DQUOTE(INST))
#do stuff with $dir

我个人会设置一个PowerShell脚本,它接受参数
-Server
ServerInstance
,因为默认实例始终是MSSQLSERVER,您可能需要添加一两行代码来处理这个问题。

您试过使用Get-SqlInstance命令吗?@Alexerm是的,我一直在玩这个
Get-SqlInstance-ServerInstance“MyServer”
错误,无法找到与参数名称“ServerInstance”匹配的参数。和
Get-SqlInstance-Credential-ServerInstance“TECHPCJRF03”
提示我登录,但是,即使登录失败,请使用
验证目标服务器是否可访问,以及SQL server云适配器服务是否正在运行。
但它是可访问的。我现在登录了!PowerShell不知道实例名称,因为它将在计算机上下文中运行(因此,
$env:computername
可以工作),也不知道实例名称,因为在特定的计算机上可能有多个命名实例。您必须从SQL脚本中提取命名实例,并将其作为参数传递到PowerShell作业中。@HAL9256这很有意义。是否有方法将
SELECT@@servername
的结果传递到作业的PowerShell部分?PowerShell都包含在我上面发布的
@命令中。太棒了!现在就开始测试。