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

时间:2019-07-17 16:48:07

标签: sql powershell named-instance

我有一个SQL Job(除其他事项外)操纵以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提取此作业所在的实例的名称?

1 个答案:

答案 0 :(得分:1)

如果使用的是SQL作业,则可以使用SQL Server Agent token获取实例名称以及服务器名称来找到服务器实例。

作为起点,我认为您可以摆脱:

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

我将亲自设置一个采用参数-ServerServerInstance的PowerShell脚本,因为默认实例始终是MSSQLSERVER,您可能需要添加一行或两行来处理该脚本