我有一个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提取此作业所在的实例的名称?
答案 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
我将亲自设置一个采用参数-Server
和ServerInstance
的PowerShell脚本,因为默认实例始终是MSSQLSERVER,您可能需要添加一行或两行来处理该脚本