2011-07-01 455 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