如何从Windows命令行向Sql PowerShell发送多个命令?

时间:2011-07-01 17:45:26

标签: sql-server-2008 scripting powershell ssms

不确定这是否属于serverfault ...

我按照this网站上的说明,通过powershell将注册服务器添加到sql studio management studio。它一次只能很好地工作,但我需要为60台服务器做这件事。

我有一个批处理设置,其中包含我需要的每个创建的代码。我无法通过命令行调用sqlps并传入整个命令系列。 我的批次设置如下:

sqlps -NoExit -Command { cd 'SQLSERVER:\sqlregistration\Database Engine Server Group\' new-item $(Encode-Sqlname server1) -itemtype registration -Value "server=server1;integrated security=true" ... and so on }

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您在PS1文件的单独行中列出了每个单独的新项目,例如假设我有一个名为register.ps1的文件,其中包含以下行:。

cd 'SQLSERVER:\sqlregistration\Database Engine Server Group\'; new-item $(Encode-Sqlname server1) -itemtype registration -Value "server=server1;integrated security=true" 
cd 'SQLSERVER:\sqlregistration\Database Engine Server Group\'; new-item $(Encode-Sqlname server2) -itemtype registration -Value "server=server1;integrated security=true" 

您可以像这样调用sqlps:

sqlps -NoExit -Command "&{C:\bin\register.ps1}"

更好的解决方案是将参数添加到register.ps1

param($ServerInstance)

cd 'SQLSERVER:\sqlregistration\Database Engine Server Group\'
New-Item $(Encode-Sqlname $server) -itemtype registration -Value "server=$serverInstance;integrated security=true"

然后使用SQL实例列表创建一个文件,例如server.txt:

server1
server2

为每一行调用register.ps1:

get-content C:\bin\server.txt | foreach {C:\bin\register.ps1 $_ }

答案 1 :(得分:0)

在命令之间放置分号。

答案 2 :(得分:0)

感谢@Chad指出我正确的方向,我想出了这个,它起作用了:

包含多行的批处理文件,每行看起来像这样:

sqlps -Command "&{ cd 'SQLSERVER:\sqlregistration\Database Engine Server Group'; new-item $(Encode-Sqlname serverX) -itemtype registration -Value \"server=serverX;integrated security=true\";}"