从 Powershell,在单个 SSMS 实例中打开多个 SQL 文件

DBADon

我有一个自动化的 Powershell 进程,它以一个 Invoke-Item 命令结束,为测试人员打开多个 SQL 文件(当前为 4 个 SQL 文件),以便他们可以运行他们的脚本。请记住,我不是在执行他们的脚本,我只是在我的进程结束后打开它们。测试人员当然可以自己打开脚本,但我希望能够为他们布置一切。

问题是,SQL 脚本总是在多个 SSMS 实例中打开,通常第一个文件有 3 个文件,第二个文件有 1 个,但偶尔有 2 个和 2 个。(当我将 SQL 文件的数量扩展到 10 个时,我得到四个实例,其中 3 , 3, 2 & 2 个文件。)

我有不同 SQL 版本的服务器,因此可执行文件的路径可能因系统而异。因此,直接调用带有附加文件名的 EXE 不是一种选择,除非我添加逻辑以预先找到 EXE 的正确路径。

注意:这些是不同的 SQL 版本(2008R2 到 2017),SSMS 版本将是安装附带的版本,而不是新的独立 SSMS

如何让所有 SQL 文件在 Powershell 的单个 SSMS 实例下打开?

$sql = (Get-ChildItem -Path C:\Temp\Export | Where-Object {$_.Name -like "*.sql"}).FullName
II $sql
DBADon

我希望避免它,但我能够通过确定最新 SSMS.exe 的路径,然后使用 Call 运算符而不是 Invoke-Item 来解决此问题。

$ssms = $null

If (Test-Path "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18"){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null -and (Test-Path "C:\Program Files (x86)\Microsoft SQL Server\150")){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server\150" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null -and (Test-Path "C:\Program Files (x86)\Microsoft SQL Server\140")){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server\140" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null -and (Test-Path "C:\Program Files (x86)\Microsoft SQL Server\130")){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server\130" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null -and (Test-Path "C:\Program Files (x86)\Microsoft SQL Server\120")){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server\120" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null -and (Test-Path "C:\Program Files (x86)\Microsoft SQL Server\110")){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server\110" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null -and (Test-Path "C:\Program Files (x86)\Microsoft SQL Server\100")){
    $ssms = (Get-ChildItem -Path "C:\Program Files (x86)\Microsoft SQL Server\100" -Recurse | Where-Object -Property Name -EQ "ssms.exe").FullName}
If ($ssms -eq $null) {Write-Host "SSMS Has Not Been Been Found!" -BackgroundColor Red}

$sql = (Get-ChildItem -Path C:\Temp\Export | Where-Object {$_.Name -like "*.sql"}).FullName

& $ssms $sql

以这种方式对目录进行排序可确保我打开最新的 SSMS 客户端,但更重要的是,它每次都会打开同一个 SSMS 实例中的所有 SQL 文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章