2011-07-01 89 views
1

不知道这是否属于serverfault或不...如何从Windows命令行向SQL PowerShell发送多个命令?

我正在按照this站点上的说明通过powershell添加注册的服务器到SQL 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 } 

任何帮助表示赞赏。

回答

0

由于@Chad指着我的权利方向,我想出了这个,它的工作:

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

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

在命令之间放置分号。

+0

没有运气......即使运行sqlps -NoExit -Command {cd'SQLSERVER:\ sqlregistration \ Database Engine Server Group \ Stores'; } 让我在提示“PS SQLSERVER:\>”,所以目录甚至没有改变... – IronicMuffin

+0

你是从PowerShell运行它还是其他? (像cmd.exe) – JasonMArcher

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 $_ } 
+0

我试过了,我会看到代码行,但他们什么都不会做。 – IronicMuffin