首页 > 解决方案 > 通过 PowerShell 获取 SQL 命名实例名称

问题描述

我有一个 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 提取此作业所在的实例的名称?

标签: sqlpowershellnamed-instance

解决方案


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

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

@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,您可能需要添加一两行来处理它。


推荐阅读